Showing posts with label programming career. Show all posts
Showing posts with label programming career. Show all posts

5 reasons why I still program, and not get into architecture or managerial roles?

People generally expect you to get into managerial roles as you grow older, and perform tasks  such as managing a team, acquiring funding, etc. Programming can be a lot of fun as you will be learning, writing, creating, problem solving, analyzing, and if you are aware of the other avenues you can explore as a programmer, you will be marketing, blogging, networking and generating a small passive income. So, you are not just coding, but performing a wider range of interesting activities.

Here are my top 5 reasons to stay in programming. So, if anybody asks you in a condescending way,  Dude, are you still programming using if...then...else?, you know what to tell them.

Reason 1:

First, and foremost, I love being a programmer. I get instant gratification by building the small pieces of puzzles by asking the relevant questions and applying the 16 key areas to see my working code.A firm believer in playing to my strengths.

Reason 2:

As a freelancer or contractor, there are more jobs available for development roles than an architect or a managerial role. So, staying as a programmer helps me find contract roles almost immediately in between contracts without any prolonged gaps. Also, get paid a decent rate, which is in par with the middle management salary if not more.


Reason 3:

Staying hands-on helps me explore passive income generating avenues like self-publishing technical books, affiliate marketing and pay-per click income, etc. Once you leave hands-on development, and get into management, it will be hard to get back into development.


Reason 4:

I find it much easier to work with a computer than with people. Working hours are also more flexible as long as you get your work done. While my people skills are not bad, why take on non-technical challenges that I am not too motivated to solve. I don't want to waste my time and energy in things that I don't do well. I would rather solve problems relating to performance, security, multi-threading, etc.


Reason 5:

As a developer, I get to work on creating abstract ideas and dig deeper into details. I don't have to worry too much about the administrative tasks that many managers have to perform like signing time sheets, seeking approvals, replying to too many emails, etc. Also, no need to attend too many meetings, which are conducted mainly for keeping the team in the loop.


Warning: Having said this, many programming jobs are not your typical 9.0 am to 5.0 pm jobs. It is a time consuming activity, and you can miss out on other exciting things in life.

Managerial job is not easy, and it takes a lot of skills and personal attributes to be a good manager. So, it is important to play to your strengths to have a rewarding and satisfying career.


What does "Code, draw and market to your programmer-Success or Java-Success" mean?

For any programmer success for example Java-Success or  .Net-Success 




  -- Yes, you need to have good soft skills like communication, interpersonal, team work, analytically, problem solving, etc
  -- Yes, you need to be passionate
  -- Yes, you need to have the right attitude
  -- Yes, you need to be a "quick and on-going" learner
  -- Yes, certification can help

But, most importantly,

  -- You must know how to write robust and quality code. That is the bottom-line for a programmer.


Your coding skills will be under scrutiny

  -- through pre-interview written tests
  -- through face to face job interviews
  -- through peer code reviews on the job
  -- through challenges to quickly identifying root causes by reading others' code and fixing critical production issues whilst your superiors are looking over your shoulder or requesting for regular updates.
  -- through helping your peers and superiors and earning a reputation as a go to person.
 -- through your open-source contribution, Github check-ins, and blog posts.


To get further, you need look at the big picture and

  --  draw a plan as to what you can do as a programmer?.
 -- draw on your experience and others' experience gained proactively through books, blogs, articles, opensource contribution, etc  to impress your interviewers, code reviewers, peers, and superiors.
  -- draw high level diagrams at job interviews.
  -- draw high level diagrams to communicate your thoughts to your peers, superiors, and stake holders at work.
  -- draw attention to your resume with well rounded accomplishments and experience.
  -- draw attention to your depth of knowledge in the 16 key areas in the job interviews.
  -- draw on your creativity to differentiate yourself from others.



It is not enough being a quiet achiever. You need to be visible.

 -- You need to have a professional online presence via blogging, personal portfolio, LinkedIn profile, etc to market your skills and knowledge.

-- Marketing is key to expanding your horizons by
  • promoting your know-hows in the 16 key areas to solve business problems.
  • promoting your services as a freelancer/employee/consultant.
  • promoting your books as an author.
  • promoting your blogs as a blogger.
  • promoting your software applications, products and services as an entrepreneur. 
  • promoting others' products and services via your online presence.

 Code, draw and market will open doors
  • to increase your earning potential.
  • to be in a position to choose from multiple job offers.
  • to be in a position to find work in a difficult job market.
  • to passive income generation.
  • to become a freelancer.
  • to go places ... and do what you are passionate about.


How to break into IT without a computer science degree?

This is based on my experience. In 1999 I made a career change from being a mechanical engineer to a Java developer. It was much easier then because it was the "Dot com boom" time and if you knew the mainstream language fundamentals, basic SQL, and HTTP basics with how to write a simple web application, you can easily bag a job. That is how I transitioned within 9 months by self-studying "Beginning Java" by Ivor Horton and a Servlet programming book for writing web applications. Now a days, it is much more competitive, and can take more than 15 months.


What do you need to know?

  1. A mainstream programming language of your choice like Java, C++, C#, PHP, etc.
  2. HTTP paradigm knowledge and an enterprise web development framework like JEE, .NET, Rails framework, etc.
  3. RESTful and SOAP web services knowledge and experience.
  4. HTML(5), CSS(3), and JavaScript to build rich internet applications.
  5. sought-after frameworks and tools relevant to your mainstream  language -- development and build tools.
  6. SQL language to query the database and regular expression to match patterns in text.
  7. XML and JSON to transfer data between disparate systems.  
  8. Scripting languages like Shell, Ruby, Python, etc.

How would you go about acquiring the skills & experience?


The key is to to get hands-on experience along with good working knowledge. Don't get too hung up on getting certified.  Some professionals do stigmatize those who expend too much time on academic qualifications as opposed to hands-on experience. So, your focus must be on 




  1. learning the basics via good books, blogs, and articles
  2. applying the basics by writing code via good tutorials
  3. starting self-taught projects and expanding on them with sought-after frameworks and tools.
  4. uploading your project to Git hub 
  5. blogging about your experience
  6. contributing to open-source projects with a view to learning and expanding your horizons
  7. contributing your skills on a voluntary basis -- start with charity and community projects
  8. adding your hands-on experience to your resume and online portfolio with the links to your work in Git hub and your blog articles that share your experience.


Where do you research what to learn, how popular it is, etc?
  1. Industry sites like http://www.infoq.com/, http://www.dzone.com/mz/http://java.dzone.com/, etc where industry experts provide some insights.
  2. Online job advertisements to see what the the prospective employers are looking for.
  3. http://www.google.com/trends/ to look for the trends. For example, type "Java", "C#", etc.
  4. https://github.com/trending/ and select your mainstream language. GitHub is a social coding website and source-code hosting service that uses Git as its version control system. Launched in 2008, GitHub already boasts nearly 1.7 million people hosting nearly 3 million repositories. Like most social networks, GitHub allows users to create and follow feeds associated with each other's projects.
  5. TIOBE index http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html, and search for programming languages.

What tips do you give to break into IT?

  1. Good technical skills must be complemented with good soft skills like communication, problem solving, and analytic skills and right attitude like "I can do", "I am part of a team", "motivated to learn", etc without being negative or having "I know it all"
  2. Good resume writing, interviewing, networking and overall job hunting skills.
  3. Shifting  your mindset from acquiring certificates to gaining the much needed hands on experience and sharing your skills & experience via social networking like Git Hub, blogging, Facebook, Google+, etc and resume.  
  4. Be realistic – Your 6-9 months of self-study is not likely to get you the dream job, and also be willing to start towards the bottom end of the pay, but within 2 years you can fast track your career. 
  5. Getting a good handle on the 16 technical key areas and applying them to solve business and technical challenges.
  6. Make getting good hands-on experience in sought-after technologies/frameworks and 16 technical key areas your #1 job search or career fast-tracking criteria.

5 Motivating factors to do well in your programming career

#1: Nitty-gritty reasons like insult, failure, professional embarrassment, and lack of respect. For example,  not getting the job you badly wanted,  being unemployed for a while, leaving a job in unpleasant circumstance, etc. There is no better way to get even with those caused this to you than proving yourself with a success. There is an old saying -- "Massive success is the sweetest revenge".

One can learn more from his/her failures than successes.  If you are not failing, you are not pushing yourself out of your comfort zone. I have failed in many ways like being unemployed for 1.5 years even with a masters degree and left my first IT job within first 5 months due to personality clash with my team lead. These major failures along with other smaller insults and embarrassments have motivated me to do well in my career.  So, don't be afraid of failure, and use them to motivate yourself.

If I didn't get pushed to quit my first IT job, I may not have got out of my comfort zone to become a freelancer. I may not have motivated myself to fast-track my career. So, don't be afraid of failing. Use it to motivate yourself.


#2: Recognition is the validation of your worthiness. If you want to get recognized, you need to proactively get things done like adding value to the organization you work in, getting a good handle in the 16 technical key areas to solve challenging problems both proactively and retroactively,  and use your soft skills to bring out the maximum from other people to accomplish things for your organization. For example,
  • Initiate a quick win project to fix an issue or  enhance a process.
  • Become a facilitator to drive changes.
  • Identify potential issues, and take initiatives to fix them.

Sometimes you don't get the recognition you deserve for various reasons. At times, people working for large organizations move to smaller organizations to get recognized as architects from being senior developers or as CIOs (Chief Information Officer) from being a development or delivery managers. When you leave with a good rapport, you can always move back to a larger corporation in the future with a different title, job role, and responsibilities. You need to embrace change to make things happen.

Sharing your knowledge and experience via creative and unique blogging and self-published books can give you recognition in the form of positive comments, job openings, more subscriptions, speaking opportunities, and invites for new collaborative ventures.

Certification is a recognition of your academic accomplishments. It is a personal recognition, and prospective employers recognize hands-on experience/accomplishments more than the academic accomplishments.





#3: Joy of winning. Some people are addicted to winning. This is what drive sports people. In IT world it means accomplishing your objectives. For example, designing and building an application that meets both functional and nonfunctional requirements within the stipulated time frame. Proactively identifying a security loophole or a an obscure thread-safety issue, and then seeking the approval from the management to fix them. You need to have management visibility when you fix things to get the recognition you deserve and to get the feeling of winning due to your  "know hows" and contributions.

When you have an application that is falling over every second day, fixing it will be the top priority of your middle and senior management. You can seize this opportunity to show off your analytical skills, problem solving skills, passion for the work you do, and the technical skills in the so called "16 key areas" by identifying the root cause of the issue and fixing it. Especially, before your other team mates identify and fix the issue to feel the joy of winning, in a professional manner.

Your scoreboard is all about
  • improving the application performance by 30%, reducing the response times by 60%, etc.
  • being in a position to attend many interviews and choose from multiple job offers.
  • increasing your book sales and number of blog followers.
  • improving the Google page ranking of your website or blog due to your SEO (Search Engine Optimization) efforts.


#4: Money for yourself and your family. People often change jobs and careers to earn more. Money is certainly a motivating factor to do well in your career. Some fear changes, and feel stagnated in their careers without any proper pay rises other than smaller rises to keep it in line with the inflation.


#5: Helping others to share your knowledge, experience, and wealth. In addition to focusing on gaining achievements and success for yourself, it’s better to focus on future generations, and what you can do for the future of the world.


This post was motivated by the following book by Mr. Jim Rohn.

8 things to consider when choosing your next IT job

In programming career forums, interview candidates often ask how to choose from multiple job offers? This is not an easy decision to make and often this dilemma is made worse due to not asking the right questions about the position or role at the interview. An interviews is a two way process where the interviewer(s) assess the suitability of the candidate to the position or role whilst the candidate assesses the suitability of the position or role to his/her career goals. Asking the right questions at the job interviews can not only help you make an informed decision to choose the job of your dreams, but also can help you negotiate your remuneration and market your skills & strengths more effectively based on the answers.


What questions can you ask in the job interviews?
  • If I am successful, what type of projects will I be involved in and what type of technologies/frameworks will I be exposed to?
  • Will this role involve liaising with the business users and mentoring opportunities?
  • What types of candidates succeed in your organization?
  • Is this a mission critical project? How big is the team? What is the rough budget for this project?
  • What are the key tasks and responsibilities involved with the role?
  • Does this involve new development, enhancement or support work?

Here are the 8 aspects to consider with an analytical approach to choose your next job

Give weight to each aspect based on how important it is to you out of 100. For candidate A, remuneration might be far more important than "location and life style choices", whereas candidate B, fancies type of role and opportunities tom learn sought-after frameworks far more than the remuneration.

#1: Remuneration and other monetary benefits: This is an important criteria but not the only one. You need to look long term. [E.g. weight = 30%].

#2: Opportunities to learn and/or work with popular, emerging and sought after technologies, frameworks, and tools. For example, opportunities to acquire new skills like cloud computing, SOA, Big Data, BPM, etc. Getting involved with an agile software development environment. By acquiring emerging and sought after skills, you can stand out from your competition the next time you start hunting for a job [E.g. weight = 25%].

#3: Type of project (new project, enhancement to existing project, support): You tend to learn more on new projects. [E.g. weight = 15%]

#4: Brand name, company culture, and business acumen. Brand name does matter - it helps you to get more interview calls next time you start hunting for a job - but again what skills & experience you will be acquiring matters more. You may get more interview calls but may find it difficult to get through your interview stages if your skills are not enhanced through good hands-on experience. [E.g. weight = 10%]

#5: Type of role (mentoring role, liaising with the business, travel, leadership, semi-technical/ semi business, etc)  and opportunities to grow: Would this role have active involvement with the business users? will I have mentoring opportunities? is it a well rounded role to develop my soft skills? will I get opportunities to demonstrate my leadership skills? [E.g. weight = 5%]

#6: Type of organization (Insurance, Finance, Software house, multi-national, retail, health care, etc). In some types of organizations like finance and insurance you tend get better remuneration, but you will be expected to work longer hours. In some software houses and consultancy roles you tend to acquire a wider range of skills. [E.g. weight = 5%]

#7: How comprehensive the interview was. The more comprehensive the interview was the better chance of working with the good caliber staff. Some companies are more serious about attracting the right candidates than the the others.[E.g. weight = 5%].

#8: Location and lifestyle choices. [E.g. weight = 5%] .

Total weight should be 100%.

Note: Weights are for illustration purpose only and may vary from individual to individual.

You can analytically work it out as follows:

You can give some weight to each of the criteria as shown above. The weight needs to add up to 100%. Now say you have offers from company A, B and C. You give some points out of say 10 to each of the above criteria and then multiply each point by the weight (i.e. importance to you) and then add them all up. If the difference is negligible or not conclusive enough then go with your heart. Otherwise you know which ones to pursue with the salary negotiations. Always think beyond monetary benefit.

What are the 16 technical key areas of programming and how will they help you fast-track your career?

What are the 16 technical key areas?




  1. Language Fundamentals (LF)
  2. Specification Fundamentals (SF)
  3. Platform Fundamentals (PF)
  4. Design Considerations  (DC)
  5. Design Patterns (DP)
  6. Concurrency Management (CM)
  7. Performance Considerations  (PC)
  8. Memory/Resource Considerations  (MC)
  9. Transaction Management  (TM)
  10. Security (SE)
  11. Scalability  (SC)
  12. Best Practices (BP)
  13. Coding (CO)
  14. Exception Handling (EH)
  15. Software Development Processes (SDP)
  16. Quality of Service  (QoS)


Why will they help you fast-track your career?
  1. I am yet to work for an organization that didn't face challenges relating to performance, memory, security, scalability, and concurrency. When you have production issues relating to these key areas, the middle to senior management will be constantly monitoring progress through regular crisis meetings. Having a good handle on these key areas to solve issues will put you on the good books with the management. 


  2. Technical job interviews are conducted by senior/lead developers and  architects. The above key areas are their favorite topics, and you can get open ended questions, which have no right or wrong answers, but you can really show off your  technical and communication skills with the quality of the answers you provide. Here are some popular open-ended questions

    • Can you describe the architecture of the last application you had worked on from a 100 feet?
    • How would you go about designing an online shopping cart application in .Net?
    • Can describe some of the common mistakes and pitfalls of C#? What features do you like and dislike? What features do you like to be added in the future releases?
    • If you are reviewing others' code, what would you look for?
    • What do you like the most about your current job?
    • How do you ensure code quality within your team?
    • What is a deadlock, and how will you go about detecting and fixing a deadlock?
    • Can you describe a situation where you fixed a transaction management or a concurrency issue?


  3. When you are asked the very common ice breaker interview question "tell me about yourself?"  you can highlight your strengths in the technical key areas, and also for other questions like "what are your strengths?", "why should we hire you?", etc you can bring out your strengths in these key areas with examples. Towards the end of the interviews, you will be asked  -- "Do you have any questions for us?". If you feel that you have not sold your key strengths as well as you would have liked, take this question as an opportunity to ask your interviewers the questions like -- What kind of developers succeed in your organization?, Do you think that hands-on experience in writing low latency applications and ability to identify and fix performance and concurrency issues will be handy?, Do you have any reservations about any areas of my abilities to get the job done?, etc to give yourself a chance to sell your strengths and  leave the interview with a good impression.


  4. In code review sessions to impress your superiors and peers. I improved my coding skills by reviewing others' quality code, and also learned what not to do from others' bad code. Having a good handle on the above technical key areas like best practices, language and specification fundamentals, coding, exception handling, quality of service, scalability, etc will help you write robust code.


  5. These key areas will help you contribute in your team meetings.  All your contributions will be noticed for potential promotions and pay rises.


  6. Good engineers ask the right questions like 

    • If an exception gets thrown here, will my transaction get rolled-back  properly?
    • Will this regular expression gets back tracked, and adversely impact performance?
    • Do I have proper service timeouts and retries implemented properly for web service calls?
    • Should I have dead lock retry here?
    • Should I go for optimistic or pessimistic locking?





    This is also a part of the answer for the question -- Why do you like software engineering? Good software engineers like to see all these 16 technical key areas fit together like a jig saw puzzle to build a quality application.


  7. Knowledge, skills, and experience gained in these key areas are transferable from one programming language to another. So, these are transferable skills. 


How do you go about getting a good handle on these key areas?

Proactively pick a  key area that you have less experience with and learn about it relating to your mainstream language. Write some sample code. Examine others' code in your work to see how it was applied. Find a way in which you can apply it in your current project. Blog about it in your own style. Add it to your resume.

In short, Learn --> Apply --> Let the world know