All programmers are not alike. Knowing what kind of programmer you are is crucial to finding the right kind of job. While you can probably do many different kinds of programming tasks, they won’t all turn your crank in the same manner. Doing something you don’t really enjoy is fine on a short-term basis, but you need to be interested in and excited by what you’re doing to sustain you over the long term. The best programmers are passionate about their work, and you can’t truly be passionate about something that’s only moderately interesting to you.
If you’re not sure what you like or dislike, ask yourself some questions:
Are you a systems programmer or an application developer? Systems programmers work on the code that keeps computer systems running: frameworks, tools, compilers, drivers, servers, and so on. Other programmers are their primary audience, and there’s little interaction with nonprogrammers. Application developers, on the other hand, work on the pieces that those nonprogrammers use to do their own work, and there’s often more interaction with nontechnical people.
Do you like coding user interfaces? If so, and if you’re skilled at it, consider yourself lucky. User interface design is finicky work, easy to criticize, and hard to do well, especially when internationalization and accessibility issues are taken into account.
Are you a good debugger? If you think finding problems in your own code is bad enough, imagine what it’s like to fix problems with someone else’s code. It requires strong analytical and problem-solving skills. Finding and fixing bugs can be extremely rewarding in its own right, but it’s definitely not for everyone.
Are you an architect or a coder? Every coding job includes some kind of design aspect, but certain jobs lean more one way than the other. If you enjoy the designing more than the coding, a position as a software architect might be more appealing. That said, architecture positions can involve a lot of interaction with others and little or no coding, though you need a good understanding of how to code in order to be an effective architect. Unless you take formal training in software architecture, the usual route to becoming an architect is to code first and then display an aptitude for designing and fitting together different pieces of a project.
While the preceding questions deal with the different kinds of programming that might interest you, there are also nonprogramming questions to consider:
Does management interest you? Some coders have a long-term goal of becoming a manager, but others shiver at the very thought. If management is your goal, however, you’ll need to develop leadership skills and demonstrate that you can manage the human parts of the software development equation as well as the technical pieces. If management is not your goal, look for companies with good technical career paths so you’re not forced to manage people in order to be promoted.
Do you want to work for a big company? There are advantages and disadvantages to working at big companies. For example, a large company usually offers more job stability and some kind of career path. It may also have a name brand that nontechies recognize. On the other hand, you may feel stifled by the bureaucracy, rigidness, and intercompany rivalry that is often found within bigger companies.
Do you want to work for a small company? The pay may be less, but getting in on the ground floor at a new company can ensure future advancement (and possibly substantial remuneration) as the company grows and succeeds. The downside, of course, is that most new ventures fail and you may be out of a job within a year or two.
Are open-source projects preferable? The vast majority of programming jobs have usually involved proprietary, closed-source projects, which some programmers find objectionable. There’s been a small shift in favor of more open software development, which provides more opportunities for people like yourself to participate in open-source projects and still be paid for that participation.
Do you want long-term or short-term projects? Some programmers crave change, spending a few months at most on each project. If you like short-term projects and don’t mind traveling, a gig with a consulting company might make more sense than a more conventional corporate job.
Lecture 12 Programming Abstractions Stanford >
Check this out lection of Julie Zelenski about programming abstractions in the Stanford Computer Science Department, Course (CS106B).
1. Preferred Programming Languages:
Do you gravitate towards certain languages because of their syntax, community, or the type of projects they are suited for? Your preference for languages like Python, JavaScript, C++, or others can influence the type of projects you work on and your role in a team.
2. Problem-Solving Style:
Do you prefer to dive straight into coding, or do you spend a lot of time planning before you write a single line of code? Some programmers are more methodical and analytical, while others are more intuitive and experimental.
3. Interest in Front-End vs. Back-End vs. Full-Stack:
Are you more interested in the user interface and experience (front-end), the data and business logic (back-end), or a combination of both (full-stack)? This preference can define your specialization and the kind of projects you find most rewarding.
4. Industry or Domain Focus:
Are you passionate about a specific industry or domain, such as finance, healthcare, gaming, or web development? Programmers often become experts in the domain they work in due to the specialized knowledge required.
5. Project Size Preference:
Do you thrive in large-scale, long-term projects, or do you prefer short, quick turnarounds? Your tolerance for complexity and change can influence the type of environments and projects you're best suited for.
6. Teamwork vs. Solo Work:
Do you enjoy collaborating with others, or do you prefer to work alone? Understanding your collaboration style can help you fit better into teams or find roles that match your preferred working style.
7. Detail-Oriented vs. Big Picture:
Are you the type of programmer who enjoys working on intricate details and specific components, or do you prefer to oversee and understand the entire system? This can influence whether you're better suited to specialized roles or more generalist positions.
8. Innovation vs. Maintenance:
Do you find joy in creating new things and working with cutting-edge technology, or do you find satisfaction in optimizing and maintaining existing systems? Some programmers are drawn to innovation, while others excel in environments that require maintenance and incremental improvements.
9. Learning Style:
Do you prefer structured learning environments, or do you learn best by tinkering and exploring on your own? Understanding your learning style can help you acquire new skills more effectively and choose projects that enhance your growth.
10. Risk Tolerance:
Are you comfortable working in fast-paced, high-risk environments, or do you prefer more stable and predictable settings? Your risk tolerance can guide the type of companies and projects you're best suited for, such as startups versus established companies.
Reflecting on these aspects can help you understand your strengths, preferences, and areas for growth. It can also guide your career decisions and help you find the most fulfilling path in the vast field of programming. Remember, there's no "one size fits all" in programming – everyone has a unique set of skills and preferences.
Summary
It’s important to realize that there are no universal answers to these questions, no right or wrong way to answer them. The more truthful you can be with yourself in answering them, however, the more likely you’ll be able to find the kind of programming job you truly enjoy. Do you understand what kind developer you are? What about your answers, do you really know clear answer on these questions?!
Best articles: .NET Web frameworks, IOC pattern, IT articles, Visual Studio 2010 Tips.