Entries from March 2007 ↓
March 27th, 2007 — Managing Software Developers, Software Development
An SbR reader contacted me looking for guidance on how to work with a group of un-motivated developers; his email is below (posted with permission).
I will post my reply next Monday, after giving you a chance to weigh in on the situation.
Q: “In the course of providing Change Management consulting services to an owner operated company, I got involved in trying to find out what was happening in their IT department (4 Software Engineers). They are all on salary with full benefits.
The IT Departments absolute priority is to insure the company’s current software and network system is operational. In general the current company system only requires minimal daily maintenance with periodic planned upgrades. Accordingly the Software Developers are able to focus the majority of their time on development of a new ERP software system.
They have been at the project for approximately 5 years. Design is complete and development is underway. After much discussion and prodding I managed to get them to produce a timeline to deployment versus completion. Deployment defined as being able to switch from using the current system to the new system with a minimum of equal functionality to the current system. The timeline is to a specific date versus effort in months. They arrived at the deployment via sophisticated process versus an educated guess so I believe it is realistic.
In my view stakeholders must have a deployment date and developers need a realistic deadline. We have our deployment date (set by the developers, not stakeholders) but I suspect they are not committed to it. They start at 8:00 am on the dot and are out the door at 5:00 pm. Lunch and coffee breaks are never missed. My concern is that they have been spoiled by not previously having a definitive deployment date so it is expected to balk at accountability.
My instinct is to shut the project down but I also do not like to give up.
[I'm looking for] direction on how to motivate this group to want to take ownership and to rise to the challenge of meeting the deployment date.”
If you were in his shoes, how would you handle this situation?
March 22nd, 2007 — About this Blog
Please click here to answer the question for today: What is your highest level of education?
March 20th, 2007 — Becoming a Better Developer, Software Development
A Software by Rob reader writes:
I want to learn to program computers:
- What is your advice on becoming a good programmer?
- How do you acquire the knowledge?
- Is it necessary to know mathematics, specifically algebra, to be a good programmer?
I receive several emails per month along these lines, so I’ve decided to share my advice on the subject. Note that I said “my advice” and not “the one and only way”; there are too many paths for one person to know them all. Here are some thoughts based on my experience:
Q: What is your advice on becoming a good programmer?
Everyone I’ve talked to has taken a different path. Programming is different from other engineering disciplines; if you want to become an electrical engineer you go to school, graduate, work for an engineering firm, and one day take a test and get licensed. Programming is different because people do it as a hobby; no one designs electrical subsystems for fun. This creates more possibilities for learning how to code.
Here are the elements I think are key:
- Learn, learn, learn. You must have an insatiable appetite for knowledge. This usually means reading a programming book every few weeks in the early days, and moving on to more conceptual books like The Pragmatic Programmer, Code Complete, and Facts and Fallacies after 6-12 months of full-time coding. I can’t stress enough the value of reading, nor the value of immersing yourself in code early in the process.
- Transition into Concepts. Learning how to be a good programmer begins with learning logic concepts and language syntax; they are much easier to understand when taken together. But good developers quickly desire knowledge that transcends language syntax. Perl, PHP, Java, ColdFusion, ASP…all languages I used in my first 18 months as a professional programmer. What made me a good programmer was not my knowledge of each language, but my desire to understand and refine concepts like D.R.Y., the broken window theory, and code re-use.
- Hang Out With Programmers Who Are Better Than You. As a guitar player, the most I ever learned about the craft of songwriting was when I was hanging out with people who were much better than I. The same goes for writing software. And due to this new-fangled internet thingy you don’t even have to be physically present to be a part of the community: read programming blogs from the heavy hitters (Scott Guthrie, Rocky Lhotka, Dino Esposito, Scott Mitchell, etc…), check out programming forums, and look at other peoples’ code. Reading source code can be a pain, but the more you see the more you will be able to identity code that’s easy to understand, and code that takes a PhD to figure out how they output “Hello World” to the screen.
Q: How do you acquire the necessary knowledge?
There are a number of possibilities:
- A Software Apprenticeship. If you haven’t ready my article on Software Apprenticeships, I recommend you do. The best (and I would argue the quickest) way to become a good programmer is to write code under the wing of an experienced developer who will teach you not only the basics, but the in-depth knowledge that takes years of experience to learn. I consider this option leaps and bounds above all others.
- Learning while Doing. Want to learn to code? Get a job writing code. I don’t care if you make $5 an hour; you will progress more in 1 month as a full-time developer than you will in a year of hobby programming. There’s no better way to learn to program than to write code.
- Books & Mags. Books and magazines have been key in my quest for programming knowledge. When I’ve apprenticed developers in the past, I use books as their primary source of basic knowledge, having them read 1-2 programming books per month, while teaching them more advanced techniques in person.
- College. Having gone this route myself I am well aware of the limitations of the U.S. College system in preparing students for a career in computer programming. Preparing them for a career in determining little-o and big-O notation, sure, but actually writing code from the get go? Nope. College is great for high-level theory, but work experience trounces it when it comes to learning software development.
- Tech school. I’ve only worked with one programmer who went to a technical school and she had good knowledge of language and coding concepts, but not a ton of theory or design knowledge. As a result, her code was utilitarian and used a lot of brute-force, but was often not well-designed or easily maintainable. There’s obviously a balance between not enough practical knowledge (college) and not enough theoretical knowledge (tech school). I am using a very narrow sample, so don’t take this as a blanket judgment of tech schools. Perhaps an SbR reader with more experience in this area can enlighten us. As an aside, the network administrators I’ve worked with from tech school have been well-trained and great to work with. Perhaps the nuts and bolts of networking are better suited for such a practical teaching approach.
Q: Is it necessary to know mathematics, specifically algebra, to be a good programmer?
Quite simply, no; it’s not necessary to know math in order to be a programmer.
If you’re developing games, then mathematics and physics play a large part, but building an invoicing application does not require much beyond basic addition and subtraction.
However, from personal experience, people who have an easy time learning mathematics and enjoy solving logic problems (be they algebra or how to move Mount Fuji), tend to learn code quicker and enjoy it more in the long run. It takes a twisted mind, my friends.
If you are interested in reading more on the subject of becoming a programmer, I’ve written a totally free 33-page ebook titled How to Become a Programmer: Everything (Non-technical) You Need to Know. You can download it here.
March 12th, 2007 — Cool News, Links & Reviews
From the Numenta website:
“The first release of the Numenta Platform for Intelligent Computing (NuPIC) is a research release targeted at sophisticated developers for the purpose of education and experimentation. NuPIC implements a hierarchical temporal memory system (HTM) patterned after the human neocortex. We expect NuPIC to be used on problems that, generally speaking, involve identifying patterns in complex data. The ultimate applications likely will include vision systems, robotics, data mining and analysis, and failure analysis and prediction.
Numenta is committed to creating and supporting an open, collaborative community of companies and individuals interested in working on HTM systems. Concurrent with the Numenta Platform release, Numenta also has launched developer community tools and training materials.”
This is going to be big.
March 10th, 2007 — Software Development
Mike Taber takes a good look at the questions I posed in my post The Next Frontier in Offshoring. I especially liked this comment:
“I lived in Rochester, NY for a very long time and quickly became what I would call a big fish in a little pond. I was great at what I did, but finding a new job that I was interested in was next to impossible.”
My wife and I have talked several time about moving out of a major city and into a smaller one, but I have a hard time believing I would be able to find the type of work I need to keep me excited, especially since I’m no longer satisifed to be a corporate programmer in a dark cubicle. How much room is there for a young technology hotshot in a town of 50,000 (the population of Hattiesburg)?
For some people the small city set-up is great. People who want a nice family-oriented lifestyle, low cost of living, and don’t necessarily get a ton of enjoyment or anxiety out of their work, could be forever happy with a small city/town lifestyle. I have a number of friends who fit this description, and I could see them moving to a place like Hattiesburg or Rochester. Honestly, I often wish I were one of those people.
And then there are those who have what I call a “divine restlessness.” It’s the blessing and curse that makes certain people have to strive for achievement and be constantly learning to stay interested, entertained, and happy in work work and in life. I am definitely afflicted with the latter, and thus smaller-city life is probably not for me.
When it comes down to it, small city life vs. big city life is a matter of taste. And the key to staying happy with your career is to know your own taste beyond the shadow of a doubt.