Sunday, January 9, 2011

Are you going to learn assembly language in 2011? First Job? Does your job make you happy?

Learning a new language, rather spoken or computer, is always a good thing. Gets us exposure to different concepts. The book Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages (Pragmatic Programmers) is a good example. To me the most important computer language to learn is Assembly Language. I'm sure I'll hear that no one needs to know assembly language any more. I can be fairly certain that those people are not making cost competitive embedded systems in large quantities; smaller code means smaller memory sized parts can be used resulting in lower BOM costs. No mater if you are using the latest wiz-bang Web development language like CoffeScript, or maybe Functional Web functional programming languages and techniques for web development, my personal interest, or tried and true languages like 'C', it is still important to understand the fundamentals of the underlying system. Especially if you want to get close to the hardware.

Programming from the Ground Up by Jonathan Barlett can be downloaded here. The chemicals on dead trees version can be purchased here An introduction to programming using Linux assembly language (the version of Linux used is somewhat dated now but the fundamentals still apply) also gets in to real world issues that never get taught in a class room, for example meetings. When was the last time you had a class on holding meetings? Myself I would have put some more of the fundamentals like "Counting Like a Computer vs Counting Like a Human" at the start of the book, rather than after people are already writing code. Getting back to the section on meetings:

Where Does the Time Go?

Programmers schedule poorly. In almost every programming project, programmers will take two, four, or even eight times as long to develop a program or function than they originally estimated. There are many reasons for this problem, including:

  • Programmers don't always schedule time for meetings or other non-coding activities that make up every day.
  • Programmers often underestimate feedback times (how long it takes to pass change requests and approvals back and forth) for projects.
  • Programmers don't always understand the full scope of what they are producing.
  • Programmers often have to estimate a schedule on a totally different kind of project than they are used to, and thus are unable to schedule accurately.
  • Programmers often underestimate the amount of time it takes to get a program fully robust.

Myself I've found that the time estimate given by Murphy's Law is accurate far to often. Take the estimated time, double it and then raise it to the next higher units. A two minute task will take four hours to complete, due to interruptions from coworkers, ringing phones, slow equipment due to byzantine IT policies, the boss and/or customer changing their mind, again...If you are looking for less cynical view Jack Ganssle often promotes Wideband Delphi as a method of scheduling.

Something to keep in mind, when you are thinking of getting into programming Embedded Systems for the money, consider the words of Pete Warden in How to Hire Coders tells us:

"The best programmers often aren't driven by money...they're after more responsibility, independence, the chance to work with cutting-edge technology or recognition from their peers."

Something to keep in mind when working for that first programming job is that most employers are always interested in new fresh young employees so that they can use them as cheap slaves to improve their lifestyle.

Jacob Morgan offers some good advice, valid no mater where you are in life, in his Working Hard vs Working Smart and the Myth that Young People are Told.

"There isn't a better or worse way to get things done it's based on preference. Personally I'm not capable of bulldozing through a long list of tasks, working ridiculous hours, and sacrificing my life for a paycheck, it's just not me. I don't really admire people that make a ton of money and work ridiculous hours (if I want to make a ton of money I can just get two full time jobs and sleep 3 hours a day), I admire people that are successful yet still have discretionary time and a solid work life balance."

Tom Becker of Man Power Inc. (best known for their temporary and contract recruitment services) wrote in the Talent Management section of the January 2011 Quality Progress Magazine that Happiness Helps; Career development breeds employee engagement, boosts organizational performance. The article is free to all but registration is required to read it (why I have no idea, and I hate registering to read things like this myself).

In 50 Words Or Less:

  • Having discontented employees who don't feel engaged in the workplace often leads to lower retention and a higher rate of absenteeism, which can affect an organization's overall performance.
  • A career development program can help organizations retain and advance talented employees while boosting productivity and business performance.

Something I read not long ago, don't recall where for sure, might have been CNN Money, said that 84 percent of employed people, in the survey, where going to be looking for new jobs "when the economy improves". Sounds like shuffling the deck chairs on a sinking ship to me...