Starting software engineering, some key questions

What is software engineering?

Software engineering is the study and an application of engineering to the design, development and maintenance of software.

Typical formal definitions of software engineering are:

  • “research, design, develop, and test operating systems-level software, compilers, and network distribution software for medical, industrial, military, communications, aerospace, business, scientific, and general computing applications.”
  • “the systematic application of scientific and technological knowledge, methods, and experience to the design, implementation, testing, and documentation of software”;
  • “the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software“;
  • “an engineering discipline that is concerned with all aspects of software production”;
  • and “the establishment and use of sound engineering principles in order to economically obtain software that is reliable and works efficiently on real machines.”

What is a software engineer?

A software engineer is a person who applies the principles of software engineering to the design, development, maintenance, testing, and evaluation of the software and systems that make computers or anything containing software work.

How to become a software engineer?

Love programming. If you’re in high school, and you haven’t yet explored programming, do so. If you’re not interested in math or science to begin with, you should probably explore other options.

  • You must know at least the basics: C++, C# or Java, Javascript / HTML /CSS.

Get all the math you can in high school like algebra, calculus, and geometry, it might be worth it if you try trigonometry and graphing. Try to advance to college level math before leaving high school, you’ll need a ton of math to complete any Computer Science program and Engineering program

Plan on getting a degree. With all the success stories of college drop outs becoming billionaire CEOs in the 90’s, there is a certain lure that “as long as I think outside the box and have outstanding problem solving and programming skills I don’t need a four year degree”. It’s difficult for entry level software engineers to obtain a position without a four year degree, and an internship without being enrolled in a college curriculum at all.

Qualify your degree by what you want to do. If your love is game design and you wish to enter that industry as a game programmer, you’ll need a Computer Science degree. If you want to work for IBM, Intel, Microsoft, Google, etc., then a Computer Science degree may be good for you. If you’re looking to work for a non-technical corporation building mostly business applications, consider a degree in Management Information Systems or one of the many business technical degrees now offered. This type of degree is best for most, because it provides management and general business skills and doesn’t focus on a lot of information that will not be useful to most.

Supplement your classwork with personal research. Search job boards and note what technologies are hot and buzzing. The colleges simply can’t keep up with everything, so you’ll need to buy additional technical books and teach yourself.

Unless you’re planning to get your foot in the door through an intern position, try to find side projects while in school. No one wants to take a risk and hire someone fresh out of school without projects under their belt. Internships are great at taking care of this problem, but unfortunately a lot of students can’t land an internship or do so only to discover they would prefer to work elsewhere. The only way to give yourself options is to find some non-classroom work to put on your resume.

Develop contacts with software engineers. If possible try to connect with software developers and work on some projects under their guidance.

Understand that software engineering is not the same as programming. Every software engineer knows how to program, but not every programmer is a software engineer. Here’s the principal difference between the two:

  • Software engineering is typically a group effort, with differing and often fluid roles and responsibilities for the group members.
  • Engineers develop software to meet specifications set by their respective companies designed for their client, and generally must adhere to specific standards and practices.
  • Engineering projects have timelines, release dates, and considerable interaction between people responsible for various components.

Always do some extra activities apart from studies and related to any software that has some real time solution of any problem. Whenever you have free time spend it searching on the internet about new technologies in the market and also watch for the technologies that will be useful in the future.

After studying about all the fields related to Computer Science, choose a particular direction in Software Industry. Narrowing your choice down will help considerably in planning your career. Always think simple because the Software Industry itself is very complex.

Learn about the field. The major difference between programmer and engineer is simply that engineers design tools; these tools are then used by programmers to build solutions.

Discuss the 15 characteristics of a software engineer?

1. Passionate

The most important thing for a good software engineer is his passion for the field. This holds true for any field in life. The most vital ingredient for the success of any profession is the passion for it as underdogs have always been traced back to passionate individuals.

People have set up empires because of their passion, soldiers have won wars and teams have won matches just because of their passion and it’s no different in the software industry.

Usually an early years interest in computer science is a good indicator about the commitment level of a software engineer in the long term.

 

2. Determined

Developing and keeping check of softwares and programs is not an easy task. Developing a database or even an algorithm can take quite a lot of time and more often than not, detecting complex bugs is nerve wrecking. A competent software programmer therefore needs sound determination to cope up with routine tasks efficiently.

 

3. Team Player

There are seldom one man shows in software industry and most professional software engineers have got to work in a team. You may have to join one at your workplace or you may work with several distributed teams situated throughout the globe. No matter what the case, you should know how to blend in with the rest of the team.

A good software engineer is not only well aware about general office etiquettes but also keeps team work in mind while coding (writes useful comments in the code, writes proper documentation, religiously follows coding conventions etc).

 

4. Confident

“How is your morale?” “High, sir” “Up to?” “Sky, sir”. Keep up this sort of confidence in yourself. It is obvious that the nature of work in the world of software is arduous, mind boggling, tiring, and may at times dishearten you a lot but good software professionals keep motivating themselves from time to time by asking themselves questions like; how many people in the world could do it?, how would society get benefited once the problem is solved?, Wouldn’t I be a smarter version of myself once done with this?, Isn’t there a smarter way around this problem?, Isn’t there an algorithm for this? Who would be smarter enough other than me to solve this? etc.

 

5. Up-to-date

The world of software is continuously progressing at a rapid pace. There are new softwares, tools, languages, frameworks, modules and programs being released every day. When you’re working for international clients and conglomerates, you have to be to up-to-date with the latest trending technologies that are being worked upon.

This may sound like a piece of cake thing but in reality it’s not an easy thing to do because of the complexity of the latest technology and time required to master it. Good software engineers however are known to spend their holidays with headphones plugged in, multiple screens attached to laptops, and exploring latest available trends. So, keep your skill set be up-to-date if you want to be among the best.

 

6. Efficient Time Management

We live in a fast paced world. Everyone is working on the watch. Software engineers are no exceptions. They are given big projects and are kept on a tight time leash.

So a very important attribute of good software engineers is that they should know that they’re on a clock and therefore need to manage their time wisely. You don’t need to bother about trivial details when you’re on a deadline to say set up a whole database. As the cliché goes “time is of the essence”.

 

7. Coolheaded and Open Minded

Software engineers ought to have a cool head with an open mind. In a software related problem mostly there are multiple solutions available. In the heat of the battle, a short tempered software engineer might make a blunder due to poor emotional judgement which can cost the entire team dearly in the long run.

A software engineer therefore should have a calm personality which can help it in juggling optimal solutions. Further, one shouldn’t hesitate from adapting an approach that may not be what was originally thought. Such mentality and open mindedness puts you over the top of other developers.

 

8. Competitive

With the number of software engineers passing out each year, it’s a tough race and a very crowded one. According to recent reports, the number of software professionals in the world would top a whopping number of 26.4 million. With such huge numbers, comes great competition. Will everyone of those 26.4 million professional get a job? Unfortunately, the true but harsh answer is, a big NO.

However, healthy competition within itself isn’t a bad thing as it ensures quality of work and promotes learning.

 

9. Creative

Mostly overlooked, but creativity is a vital skill that a soft engineer should posses. Why? … Ever heard about the ‘programming is an art vs programming is a science debate’?

Creativity allows programmers to think out of the box. It allows them to work in smarter ways and explore areas which aren’t usually explored by people who like to follow hard and fast rules. It is past that time when people stuck with traditional methods for ages and most employers now seek creativity.

Creativity is also something that sets apart a software engineer from other off the mill engineers. It is a hard earned skill that allows to stand out of the crowd quite easily.

 

10. Strategist

This traits is an important attribute of any sound engineer. When you’re working on a product you need to have a clear vision about it and you need to set goals till the very final stages of the product.

Planning and vision is what drives an entire software development cycle. Remember, great software engineers always plan while an average Joe just codes!

 

11. Original

Good software engineers are always original and don’t come by the dozens. There are millions of skilled programmers out there but 99% are working on a set format (which is usually dictated by institutions they graduate from). What is bound to impress an employer or a client is the originality of your skill set.

Originality is what defines good software engineers. Your ability to stand apart from the rest of the graduates is all that matters in these vying times.

 

12. Industrious

Software industry is a game of capturing the market share. Any good software engineer has to be industrious. He ought to know what sells and a business oriented mindset.

At the end of the day, it the final product that defines you, your aptitude and your organization. No matter how architecturally perfect a software may be, unless it attracts users with its features and price, it is just another rubbish piece of program that’s destined to join the failure club where hundreds and thousands of similar softwares lay in dust.

 

13. Realist

It is very important in any field to be realistic. Software engineers may get carried away in the course of their work or with a brilliant idea but it is their ability to conduct an accurate feasibility check that allows them to determine the learning curve, real cost, return of value and future of their products.

Above all they need to be practical. There is no use in working on something that cannot be realistically achieved within a reasonable time frame. Time to market is the mother of all aspects when it comes to software development as it alone can determine the fate of a product.

 

14. Independent

A good software engineer needs to be an independent person. There may be times when your team may not be able to keep pace with you or you may be working on something that they may not be familiar with.

Any average software engineer would lag behind schedule. But the independence of a good software engineer enables him to work personally and achieve it himself. This is what makes them successful.

 

15. Nerves of Steel

One of the most praised and probably the most difficult of virtues, a good software engineer is always patient. Software development requires patience, a lot of patience, really a huge lot of patience. Things get really bumpy when there are dozens of new features to add, unexpected bugs to fix, compatibility issues to resolve, deadlines to meet, team members to mentor, seniors to be reported, clients to be briefed, quality assurance guidelines to be followed, market standards to be set and cost to be minimized.

This is what software professionals do throughout their careers, this is what defines software engineers, this is why software development is not a pie for everyone, this is why software engineers have above average IQ, this is why software professionals get paid high and this is why software engineers are so cool.

There is a price to pay for everything, patience is what you have to give in return for getting the life of a software engineer.

What distinguish a great software engineer from a good software engineer?

  • Able to balance pragmatism and perfectionism – Great programmers have the ability to make both masterful/quick/dirty hacks and elegant/refined/robust solutions, and the wisdom to choose which is appropriate for a given problem.  Some lesser programmers seem to lack the extreme attention to detail necessary for some problems.  Others are stuck in perfectionist mode.
  • Not averse to debugging and bugfixing – Mediocre programmers often fear and loathe debugging, even of their own code.  Great programmers seem to dive right and drill down with Churchill-esque tenacity.  They might not be happy if it turns out that the bug is outside their code, but they will find it.
  • Healthy skepticism – A good programmer will get a solution that appears to work and call it a day.  A great programmer will tend to not trust their own code until they’ve tested it extensively.  This also comes up a lot in data analysis and system administration.  An average programmer might see a small innocuous-looking discrepancy and ignore it.  If a great programmer sees something like that they will suspect it could be a hint of a greater problem, and investigate further.  Great programmers tend to do more cross-checking and sanity checking, and in doing so discover subtle bugs.
  • Talent. Some people get software design. Most people don’t. The ones that do are naturals. They’ve been doing it since they were very young, they just understand problem solving, expressing solutions in quality code, debugging, large scale architecture design, etc. The best people I’ve met can produce incredible quantities of correct, well-designed code in a staggeringly short amount of time. Very, very few people can do that, and if they don’t have innate feel for it very early on, it’s extremely unlikely they’ll ever develop it.
  • Discipline. These days it’s fashionable to talk about productivity, flow, etc., but great people spend 99% of their time doing useful work, and almost no time browsing the web or chatting on AIM. Everyone has ups and downs, but most people mistake lack of discipline for natural productivity fluctuations. There are millions of incredibly talented people that never see the light of day because they’re lazy.
  • Experience. Intelligence and talent are not enough – the space of potential mistakes in software development is enormous, and even the smartest people cannot work it all out on their own. Experience builds intuition, and great people make significantly fewer mistakes because they’ve seen them made before.
  • Business-awareness. You can also call it product-awareness. Most engineers (especially the really talented ones) tend to waste a huge percentage of their time making improvements to things that won’t make the slightest bit of difference in the grand scheme of things. Great engineers are aware of the fact the company exists for a purpose – they have a feel for what matters and what doesn’t to the customers. They prioritize their time accordingly, and they can work for months without any direction and still produce useful work because they always understand what’s the next most important thing to do for the company.
  • Social-awareness. Really great people are capable of cooperating with, leading, mentoring, being led by, and being mentored by other people. They’re not jerks. They’re pleasant to be around, and they understand that proving someone wrong and convincing them that you’re right are two completely different things.

*reference:

http://www.arkhitech.com/15-characteristics-of-a-good-software-engineer/

https://www.quora.com/What-distinguishes-a-great-software-engineer-from-a-good-one

http://www.wikihow.com/Become-a-Software-Engineer

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s