I spent 3 years teaching Java at the high school I graduated at. I was used to technical training courses for organizations that had already adopted Java, as well as paid courses with students who were really passionate about Java.
The high school gig was different.
Students had a dozen other disciplines to prepare for!
It was their senior year as well. Some of them were already employed as junior developers and rarely attended classes. Others were aiming for a job in a different field – front-end development, Python, Ruby.
Needless to say, their commitment was diverse.
How Software Engineering Curriculum Development Works
The class I taught was defined as “Internet Programming”. The curriculum was set early on, about 5 years before I joined the program.
I stepped in last minute due to an absent teacher. The first year was overall okay, although it was apparent that a change was needed.
But we couldn’t figure out how to refactor the program. I taught XML parsers (for some reason), the HTTP protocol, Servlets and JSP, and a bit of JSF – combined with some lab assignments and homework projects.
The tech committee consisted of 4 people (including me). We had several meetings discussing the scope of the class.
- One of the trainers was comfortable with the program and wanted to stick to what we had.
- The program director suggested JAX-RS as the main direction, given the popularity of web services.
- The deputy director considered Ruby.
- I bounced between a slight adjustment in our program, Python and Groovy (with Grails).
But we couldn’t decide on anything. Someone had to come up with a complete training program that everyone was about to approve or disagree with. It’s a time-consuming effort that we didn’t want to risk on (given full-time jobs and other commitments).
A Practical Teaching Strategy
So I spent another couple of years teaching the same program. I started every year with an overview of the agenda for the semester.
Knowing that some people are not super happy with the scope, I offered a side deal – receiving a C or even a B for the year for delivering a decent, usable dynamic web project at the end of the year (thoroughly explaining the project and the rationale behind it).
This was a relief for those who were busy with other gigs. The small group remaining in class was happy to go through the Internet programming foundations. Some have employed this know-how in their next job directly while others extracted the essentials and applied for another relevant job that could have benefited from that.
In a nutshell, if the scope of the Java class is in line with your career goals (regardless of your preferred language), spend the time to learn it thoroughly.
Otherwise, think about your grades and how important they are. If not, make sure you pass somehow while studying your tech stack. Otherwise, work hard, get an A and move forward. You’ll learn something valuable anyway.
Skillset Improvement Resources
I tend to use four different techniques for ongoing professional development in the software engineering field.
1. Day Job
The projects we work on day-to-day always require some research and the implementation of new techniques (optimizing platforms for performance, conducting security reviews, migrating proprietary applications, etc.)
Moreover, we work closely as a team on technical implementations. Folks come up with certain ideas that we evaluate against the business case. We do peer code reviews before deployments, load test solutions, build automated tests and tend to experiment with new libraries or frameworks.
The combination of working on complex projects and collaborating with other tech members is highly valuable unless you work in a dev factory reusing generic code at scale.
2. Engineering Blogs
I follow several technical blogs and social media accounts discussing new frameworks, machine learning, programming paradigms and the like. Examples:
- DZone: Programming & DevOps news, tutorials & tools
- Slashdot: News for nerds, stuff that matters
- The DEV Community
- High Scalability
Spending a few hours a week + reading a couple of tech books monthly helps me stay up to speed.
3. R&D
Whenever I stumble upon a new technique or technology which may come handy at a later point, I try to invest some time playing with it, building a test project, or integrating a library into an existing project.
Could be an AI-driven framework, an ad management library, a new IDE, a new profiling tool, configuring the web server or optimizing the database layer.
4. Pet Projects
Occasionally, I build some apps that automate certain processes or integrate systems together. For instance, I built a simple time tracking tool in Ruby, a Slack bot in Node, a PM wrapper with Electron, a task manager with Java. I have a couple of web applications for different purposes and build WordPress plugins solving various business problems I’ve faced myself.
Community events may be of help, too. Contributing to Open Source has helped me learn a lot about the web development ecosystem at scale.
While participating at large contributor events across the world, I had the opportunity to brainstorm together with hosting agencies, enterprise providers, product development companies, support teams, translation experts, accessibility consultants, and other industry peers solving problems for different industries.
Cultivating Your Engineering Professional Development
Spend a decade working in 2 or 3 good technical companies.
You can start with a large organization hiring dozens or even hundreds of developers in your area. There are multinational outsourcing companies or non-technical corporations that still need technical manpower.
It may be easier to start with an entry-level job, go through their extensive training process, and take it from there.
At a later point, work for a mid-sized company or a startup. There are different paradigms and levels of responsibility there. There’s also a higher chance that your company will pull it off, leading to steady and massive growth and a senior management position for yourself (or a VP of Technology and the like).
It’s both a great learning experience and has a chance to substitute your dream with a future in the company that you’ve joined early enough on (and thus help with leading and growing it).
If you have a chance to work for the Big 4 or another widely popular tech company, that would probably be quite exciting as well. I’ve met plenty of people who dreamed about starting a business who settled down after joining a disruptive reputable company that’s actually “changing the world”.
It’s likely that your dream of having your own software engineering company will evolve over time and you may be quite satisfied with your progress to date.
Otherwise, always consider your initial plan at all times. In order to do that, focus on those three areas during your first decade (and further):
What You Need To Focus On
- Spend a good portion of your time learning and reading. Your jobs teach you so much about an organization and the business. As a technical founder, you want to excel in all areas in the technical landscape as well as all things business. Follow other business owners and senior managers, successful team leaders in large organizations, startup owners. Read about sales and marketing, hiring, management, operations, investing, financial management and everything else that a business owner has to deal with at first (and oversee later).
- Engage in networking – both offline and online. Your colleagues may be your future hires, co-founders, or partners. Your managers may be your vendors or clients. People you meet at conferences may vouch for your commitment and trustworthiness. Grow your network and regularly interact with your peers whenever possible.
- Build your personal brand. Developing your brand will not only help you attract clients or recruits if you decide to start a business, but will also help you find great job opportunities, land freelance gigs, or develop other strategic partnerships. It may open the doors to public speaking or even writing a book. All in all, personal branding may speed up the process of founding a company and generating some leads. Becoming a thought leader and an educator in your field (through blogging, social media, Quora participation) you can increase your exposure and value within the community.
If you decide to start your business by then, you’ll already know the foundations and have learned practical lessons over the past decade of learning.
My #1 Tip On Becoming A Better Software Engineer
By the way, I created a video on what my number 1 tip is on becoming a better software engineer. Check out the video below.
Beginner developers are clueless at work — even with the best mentor on the job. They lack the overview of the bigger picture, corresponding technical layers, operating as a part of a team, utilizing internal tools and a lot more to that.
It may get depressing and troubling, especially in more agile teams and startups.
My key technique is reverse-engineering business and tech requirements.
🎯 Break down the project goals into layers and components.
🎯 Analyze and simplify each one of them.
🎯 Quantify and assign to milestones.
After all, we use reverse-engineering in our lives at any point in time.
📈 School? Investment in a better education or a future.
📈 Career? A step toward a safe workplace unlocking a better lifestyle.
📈 Family? Fulfilling your emotional dreams.
Applying the same principle at work puts your mind to ease and lets you focus on what matters the most. In a structured and analytical manner, as an engineer would do.
But that’s just my 2 cents. What’s the technique that worked for you?