Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Possible Duplicate:
What is the difference between software engineer and software developer?
How to move from Programmer to Project Lead

Writing code all your life is not really very practical in terms of growth or is it? I have heard professionals of the industry emphasizing upon focusing on UML and System Analysis & Design methodology to new and experienced programmers to grow further and excel to become a Software Engineer. Communication skills also play a vital role to manage teams and projects.

Seeking for some good advice here besides learning UML and SAD.

share|improve this question

marked as duplicate by Yannis Rizos, maple_shaft, ChrisF Dec 30 '11 at 19:21

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

There are several questions on what "Software Engineer" means (programmers.stackexchange.com/questions/106365/…, programmers.stackexchange.com/questions/9944/…, programmers.stackexchange.com/questions/19007/…) - Please clarify what kind of qualifications you assume for the title. software engineer > programmer is not as usual as you may think. –  Yannis Rizos Dec 29 '11 at 12:52
@YannisRizos - Being a software engineer doesn't necessarily require that you be a project lead. –  rjzii Dec 29 '11 at 13:14
@RobZ Agreed. That's why I first asked for clarifications on what the OP means by "Software Engineer". But I think the essence of this question is sufficiently answered by the answers to the one I marked as duplicate, even if it's not an exact duplicate. And even if it's not sufficiently answered, still there are some quite helpful points in there. –  Yannis Rizos Dec 29 '11 at 13:19
@RobZ@YannisRizos Strictly speaking there is a difference between a Software Engineer and a Project Lead. An experienced programmer may be designated as a Project Lead for a certain software project while for Software Engineer, you have to have a certain set of knowledge and skills. –  Maxood Dec 29 '11 at 13:58
@ThomasOwens I know, I'm not debating terminology (maybe just a little bit), just the implied hierarchy. "Education and Practice" as Rob Z writes in his answer, are the only answers. I just wished there was something more to the question. –  Yannis Rizos Dec 29 '11 at 15:01
show 8 more comments

3 Answers

up vote 5 down vote accepted

Software engineering is an incredibly broad field. It encompasses the entire Software Development Life Cycle (SDLC) - requirements, architecture and design, construction, testing, and maintenance. It also includes project-level topics such as project management, process methodologies, and engineering economy and financial decision making. People-related topics, such as communication and team dynamics are also important to software engineers as no major software systems are built by individuals. Societal impacts of software, ethics, professionalism, and law are (to varying degrees) also included in software engineering.

Being an engineering discipline, software engineering is rooted in mathematics (especially discrete mathematics), statistics, and computer science. When it comes to constructing software, a knowledge of algorithms and data structures, performance, and complexity often come into play.

Because software is found in so many areas, there are also numerous domains of knowledge. These could be aviation, defense and intelligence, banking, commerce, and so on. In order to interface with the people buying and using the software, a software engineer typically learns a good deal about one or more of these domains as well.

So, what does this all mean? No one person is ever going to know everything about software engineering. There's just too much. A well rounded software engineer is going to understand the SDLC, going to be a team player, and have communication skills. A good software engineer will also have a grasp of professional conduct and ethics. After that, it's mostly specialization, typically in both a domain as well as a subset of software engineering.

If you want to move into systems architecture and design, learning UML, System Analysis and Design, and good architectural and design principles are a good start. But if all software engineers were architects and designers, there wouldn't be anyone to specialize in requirements engineering, or software construction, or managing software-intensive projects.

My recommendation is to find your niche and continually work on developing your skills and knowledge both in that niche, while maintaining an understanding of other aspects of software engineering and developing the generic skills.

Also, as an aside, depending on your location, you need to be careful about the use of the term "engineer". In parts of the United States (Texas and Florida come to mind), Canada, and Europe, the title "engineer" can only be used by certain people under certain conditions.

share|improve this answer
I'm glad to read your answer here. You last 3 lines are what I have also observed in my part of the world as well i.e. in Pakistan. The terms Software Engineer and programmer are often used synonymously particularly when it comes to small or medium sized enterprise projects. Essentially, speaking an "engineer" is someone who seeks a logical and sustainable solution to a problem within predefined budget constraints. Correct me if I am wrong. So the bottom line here is that a Software Engineer to a Programmer is like what a Civil Engineer is to a Mason. Thank you –  Maxood Dec 29 '11 at 15:44
Good point on the nomenclature, NCEES is in the process of developing a software engineer PE exam and already have a computer engineer exam so the use of the title might grow more protected in the near future as states start implementing licensure. –  rjzii Dec 29 '11 at 17:43
@Maxood: that's not the bottom line at all. Analogies between software development and construction of physical artifacts are so poor that they are useless. Software design documents can never be as complete as a bridge design; if they were they could be compiled and executed. –  kevin cline Dec 29 '11 at 17:46
@Maxood - There has been confusion of the terms "programmer" and "software engineer" but I would expect a software engineer to know a lot more about ensuring that the overall system design is correct and that the process is producing the correct product (i.e. engineering) as opposed to just implementing the system. –  rjzii Dec 29 '11 at 18:29
Thanks for the information folks! :) –  Maxood Oct 15 '12 at 16:21
add comment

Education and Practice

There are a couple big differences between a programmer and a software engineer and those differences are still being debated. Personally, I think that the biggest difference is that the programmer is given a defined task and are expected to implement it (i.e. write a log-in page) where as software engineers are given a general objective (i.e. develop an e-commerce site for a store) and are expected to ensure that the result not only fulfills the objectives, but also is stable and secure as well. Making the jump ensure that you need a fair degree of education in order to learn how to best approach larger systems. Likewise, education also ensures that problem areas are known to you before you start working on the project - or after someone else finds them - so you can address them early on in the design process.

While you can make the progression from a programmer to a software engineer over time through practice without formal education, you will still need to do work independently to learn what you would otherwise be taught in a classroom. The best way to make the progression on your own is to challenge yourself to work on larger and larger projects or to requires larger and larger pieces of the overall picture. Likewise, recommended books for software engineering also tend to be a good place to start as this comes back to what one of the core parts of education is in some cases - someone else telling you their mistakes so you don't do the same.

You are correct that communication is a big deal when it comes to taking the lead on larger projects, so you need to be comfortable what are typically very complex ideas to an audience that may range from inexperienced to significantly more experienced that yourself. This is something that comes with practice and where taking a course or two in public speaking can be a good idea as they typically force you to stand in front of the class and present multiple reports. Additionally, clubs such as Toastmasters are also good because they give you a safe place to practice your public speaking skills so you are confident with them before going before a team meeting.

share|improve this answer
Wonder the certifications offered by SEI (Software Engineering Institute) helps as alternate to a degree when you talk about education? FYI: sei.cmu.edu/certification –  Maxood Dec 29 '11 at 14:02
@Maxood - Hard to say, the PSP exam definitively looks like it is in the software engineering domain, along with a couple of others. –  rjzii Dec 29 '11 at 17:46
add comment

Writing code all your life is not really very practical in terms of growth or is it

It can be. I've been writing code all my life, relatively speaking. My first programming job was in the 80's and I'm still writing code to this day, by choice. My title in the past has been programmer, engineer, systems analyst, architect, but all along I've pretty much done nothing but programming. That changed a little when I became an architect, where only about half my time is spent programming.

I don't use UML and I don't really do "systems analysis" in the traditional sense. I don't consider myself an "engineer" even though that's been part of my title sometimes.

I am a programmer. I've made this happen by a) being good at coding, and b) only seeking out jobs that supported my goals. For the most part that means working for small, young companies with small programming teams that value skill over degrees and certifications. I've gotten to work on some very interesting projects, and I make a pretty darn good living.

In my experience it has been very rewarding spending my whole career as a coder, and I've had plenty of opportunities for growth (for my definition of "growth", anyway).

So, figure out what you really want to do with your career and become good at doing that. If you do what you love and you're good at it, "growth" won't really matter, it will come naturally as you gain experience and maturity.

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.