Posts about software engineering

How To Become A Software Engineer/Programmer

How To Become A Software Engineer/Programmer

my advice for budding software engineers is this.

1) Know that you love software before you commit to it. You’ll know when you take your first pseudocode class: a clear division forms between the people who get it and the people who don’t. If you’re in the “don’t” section, choose another career.

2) If you don’t like teaching yourself new things, the skills you learn today will be irrelevant in less than a decade. Accept the commitment to learn throughout your career as a coder, or accept your eventual fate as a has-been.

3) College degrees matter less than hands-on knowledge and time spent at the keyboard. I outpaced my entire class in college because I bought my own programming books that deviated from the coursework, and as a result I learned things they were not teaching in school.

5) Early on, decide if you want to focus on application development or software engineering. Application development deals with making user interfaces, interfacing different systems together, solving business process problems, and exposing applications to the outside world (i.e. web services and other remoting techniques). Software engineering deals with creation of utilities and processes that support information processing, tends to be more math intensive, requires a lower-level understanding of the trade, and rarely deals with the systems that expose the software to an end user. There are core differences in these two disciplines and 100 shades in between, so figure out what you like.

Good blog post; those thinking of a career in software development should read the whole thing. By the way if you are a programmer already that loves it and looking for a new position: my work is hiring a Ruby on Rails developer.

Related: Joy in Work, Software DevelopmentThe Software Developer Labor MarketA Career in Computer ProgrammingThe Manager FAQIT Talent Shortage, or Management Failure?

The Software Developer Labor Market

With the economy today you don’t hear much of a desperate need for programmers. But Dr. Norman Matloff, Department of Computer Science, University of California at Davis, testimony to Congress (Presented April 21, 1998; updated December 9, 2002) on Debunking the Myth of a Desperate Software Labor Shortage is full of lots of interesting information (for current and past job markets).

The industry says that it will need H-1B visas temporarily, until more programmers can be trained. Is this true?

No, it’s false and dishonest… The industry has been using this “temporary need” stall tactic for years, ever since the H-1B law was enacted in 1990. In the early- and mid-1990s, for example, the industry kept saying that H-1Bs wouldn’t be needed after the laid-off defense programmers and engineers were retrained, but never carried out its promise. It hired those laid off in low-level jobs such as technician (which is all the retraining programs prepared them for), and hired H-1Bs for the programming and engineering work.

Unlike Dr. Matloff, and many readers of this blog, I am actually not a big opponent of H-1B visas. I believe we benefit more by allowing tech savy workers to work in the USA than we lose. I understand people fear jobs are being taken away, but I don’t believe it. I believe one of the reasons we maintain such a strong programming position is due to encouraging people to come to the USA to program.

I also do believe, there are abuses, under the current law, of companies playing games to say no-one can be found in the USA with the proper skills. And I believe those apposed to H-1B visas make reasonable arguments and this testimony is a good presentation of those arguments.

This obsession with specific skills is unwarranted. What counts is general programming talent – hiring smart people – not experience with specific software technologies.

Very true.

What developers should do.

Suppose you are currently using programming language X, but you see that X is beginning to go out of fashion, and a new language (or OS or platform, etc.) Y is just beginning to come on the scene. The term “just beginning” is crucial here; it means that Y is so new that there almost no one has work experience in it yet. At that point you should ask your current employer to assign you to a project which uses Y, and let you learn Y on the job. If your employer is not willing to do this, or does not have a project using Y, then find another employer who uses both X and Y, and thus who will be willing to hire you on the basis of your experience with X alone, since very few people have experience with Y yet.

Good advice.

Related: IT Talent Shortage, or Management Failure?Preparing Computer Science Students for JobsEngineering Graduates Again in Great Shape (May 2008)What Graduates Should Know About an IT Careerposts related to computer programming
Continue reading

Google Summer of Code 2009

Google Summer of Code is a global program that offers student developers stipends to write code for various open source software projects. Google funds the program with $4,500 for each student (and pays the mentor organization $500). Google works with several open source, free software, and technology-related groups to identify and fund projects over a three month period.

Since its inception in 2005, the program has provided opportunities for nearly 2500 students, from nearly 100 countries. Through Google Summer of Code, accepted student applicants are paired with a mentor or mentors from the participating projects, thus gaining exposure to real-world software development scenarios and the opportunity for employment in areas related to their academic pursuits. In turn, the participating projects are able to more easily identify and bring in new developers. Best of all, more source code is created and released for the use and benefit of all.

Google funded approximately 400 student projects in 2005, 600 in 2006, 900 in 2007 and 1125 in 2008 and will be funding approximately 1,000 student projects in 2009.

Applying for the program is only allowed from March 23rd through April 3rd. Still a short period of time but in previous years they have only taken them for one week. Organizations hosting students include: Creative Commons, MySQL, Debian, The Electronic Frontier Foundation/The Tor Project,, Grameen Foundation USA, National Center for Supercomputing Applications, Ruby on Rails, Wikimedia Foundation and WordPress. See the full list of organizations and link to descriptions of the projects each organization offers.

See the internship directory (another ltd. site) for more opportunities including those in science and engineering.

Related: Google Summer of Code Projects 2008posts on fellowships and scholarshipsLarry Page on How to Change the Worldcomic on programmersInterview of Steve Wozniak

Toyota Software Development for Partner Robots

Toyota Discusses Software Development for Partner Robots

Yamada: What was unique about the software development for the partner robots exhibited at Aichi Expo was the fact that Toyota entirely disposed of its assets from the past.

Toyota owned some software assets because it had been developing partner robots for some time before developing the robots for the exposition. But those assets were all one-offs. No one but the developers themselves could comprehend their architectures.

As Toyota was developing more than one partner robot for the exposition, the number of developers involved increased. Considering that we can never complete any development if we use the past assets that rely on an individual developer’s skill, we made everything, including the platform, from scratch again.

Toyota developed the platform focusing on promoting design review by visualizing the control logic. Therefore, the company thoroughly separated control sequences and algorithms. To be more specific, it used state transition diagrams.

Each algorithm is stored in a different block in a state transition diagram. With such diagrams, developers can easily comprehend the flow of the control and review the design even if they do not understand each algorithm. The company employed this method because each algorithm such as a bipedal walking algorithm is too complicated for anyone but their developers to understand it.

Related: Toyota Partner Robots (2006)Toyota Cultivating Engineering TalentToyota iUnit

Solving the Toughest Problems in Computer Science

Software Breakthroughs: Solving the Toughest Problems in Computer Science, 2004:

Bill Gates’ talk at MIT provided an optimistic view of the next generation of computer science, now that the “rough draft” is done. Gates finds a paradox today in that computer science is poised to transform work and home life, “but people’s excitement level is not as high as it was five years ago during the Internet bubble.” Because most sectors of the computer industry—from microchips to storage, displays to wireless connectivity— continuously improve in performance, Gates predicts a flood of new products and applications. He sported a wristwatch that receives data wirelessly, as well as keeps its user on schedule. Gates describes “rich, new peripherals” such as ultra-wideband digital cameras and he demonstrates software that allows pictures to be archived using a 3D visual interface with a built-in time, date, and keyword database. He says that computer science is merging with and making over such fields as astronomy and biology, by unifying vast, unwieldy data collections into easily navigable libraries. And Gates appears confident that technological breakthroughs will ultimately resolve urgent problems of computer and network security.

Related: Bill Gates Interview from 1993Donald Knuth – Computer ScientistOpen Source: The Scientific Model Applied to ProgrammingInternship with Bill Gates

Rumors of Software Engineering’s Death are Greatly Exaggerated

Rumors of Software Engineering’s Death are Greatly Exaggerated by Steve McConnell

Indeed, one of the hallmarks of engineering as opposed to science is that engineers will work with materials whose properties are not entirely understood, and they’ll factor in safety margins until the science comes along later and allows more precision in the engineer’s use of those materials.

Software engineering already has been defined as engineering, we have an international reference standard for that definition, the field’s two largest professional bodies have jointly adopted a professional code of conduct for software engineers, we have accreditation standards for university programs in software engineering, we have university numerous programs that have already been accredited, and several countries are licensing professional engineers in software.

Related: Who Killed the Software Engineer?Is Computer Science a Science?What Ails India’s Software Engineers?Federal Circuit Decides Software No Longer PatentableA Career in Computer Programming

Who Killed the Software Engineer?

Computer Science Education: Where Are the Software Engineers of Tomorrow? by Dr. Robert B.K. Dewar and Dr. Edmond Schonberg

Over the last few years we have noticed worrisome trends in CS education. The following represents a summary of those trends:
1. Mathematics requirements in CS programs are shrinking.
2. The development of programming skills in several languages is giving way to cookbook approaches using large libraries and special-purpose packages.
3. The resulting set of skills is insufficient for today’s software industry (in particular for safety and security purposes) and, unfortunately, matches well what the outsourcing industry can offer. We are training easily replaceable professionals.

As faculty members at New York University for decades, we have regretted the introduction of Java as a first language of instruction for most computer science majors. We have seen how this choice has weakened the formation of our students, as reflected in their performance in systems and architecture courses.

Every programmer must be comfortable with functional programming and with the important notion of referential transparency. Even though most programmers find imperative programming more intuitive, they must recognize that in many contexts that a functional, stateless style is clear, natural, easy to understand, and efficient to boot.

An additional benefit of the practice of Lisp is that the program is written in what amounts to abstract syntax, namely the internal representation that most compilers use between parsing and code generation. Knowing Lisp is thus an excellent preparation for any software work that involves language processing.

This is an excellent article: any CS students or those considering careers as programmers definitely should read this. Also read: Computer Science Education.

via: Who Killed the Software Engineer?

Dewar, a professor emeritus of computer science at New York University, believes that U.S. colleges are turning out programmers who are – there’s no nice way to say this – essentially incompetent.

Related: A Career in Computer ProgrammingProgramming Grads Meet a Skills Gap in the Real WorldProgramming RubyWhat you Need to Know to Be a Computer Game ProgrammerHiring Software DevelopersWhat Ails India’s Software Engineers?

What Ails India’s Software Engineers?

India does not produce enough good computer engineers and those it does are good at theory but not very well equipped to handle the practical aspects.’
— Microsoft Chief Technical Officer Craig Mundie

What Ails India’s Software Engineers? is an interesting series of 3 articles by Rediff exploring the state of India’s software engineering industry.

From its 113 universities and 2,088 colleges — many of which teach various engineering disciplines — India produces nearly 350,000 engineering graduates every year. All of Europe produces 100,000 engineering graduates a year, and America produces only 70,000.

But, the quality of Indian engineers is questionable, says Madhavan, who has had a career spanning four decades and is now advisor to several engineering colleges in Karnataka and Kerala.
“That is because of the lack of trained faculty and the dismal State spending on research and development in higher education in the country,” he says.

Part of what makes this article interesting is it challenges the accepted wisdom. The article offers an interesting perspective and some details that are not well understood.

In the 1980s, India had just 158 engineering colleges. That number has jumped to 1,208 in the last two decades, mainly because of the information technology boom and the ever-burgeoning capitation fee that self-financing colleges charge.

Every year, these engineering colleges admit about 350,000 students. Apart from this, nearly 3,500 students are absorbed into the seven premier Indian Institutes of Technology.