Software engineers must continuously learn and integrate
Four ways programmers can thrive in their careers.
As O’Reilly continues to build and assess our programming content ecosystem — now more than 30 years in the making — we have gone from covering a few key languages, operating systems, and concepts to a diversification of topics that would have made an editor’s head spin in the 1980s. Our goal, however, remains the same: to continue to provide practical content from experts who help you do your job. An important piece of that goal is to keep you informed as we interpret the trends on the horizon. What follows are a few of the core themes we are focusing on at the moment. Expect these to evolve and change with the speed of innovation.
You can also stay in the loop on the latest analysis and developments through our weekly Programming newsletter.
Actually be a software engineer
The term “full-stack” first emerged in a 2008 blog post (the original post is no longer available, but an archive is published here). The term perhaps reached its canonical definition in a post by Facebook engineer Carlos Bueno. He wrote:
“A ‘full-stack programmer’ is a generalist, someone who can create a non-trivial application by themselves. People who develop broad skills also tend to develop a good mental model of how different layers of a system behave.“
Whether you are striving to be a full-stack programmer, a T-shaped engineer, or you choose to rebuff those terms entirely as mere marketing, what now floats around as a “full-stack developer” definition is incomplete.
Matt Makai wrote for us in early 2014 about the driving demand for full-stack developers. He noted that Google Trends showed the term taking off in 2013. But more importantly, he wrote about the career choices implied by the term:
“A full-stack developer is a software developer who focuses [his or her] career on being immediately productive at every layer of a specific software ecosystem … Full-stack developers identify their lack of knowledge across software layers and spend time mitigating those weaknesses, rather than delving deeper into areas already known. For example, a developer who spends most of the time working with databases would spend the majority of their learning time in the front end working with CSS, HTML, and designing good looking webpages.”
Simon St. Laurent’s piece “Web by default” expands the scope, pointing out the full (and ever-expanding) range of skills that are demanded of developers today.
Here’s how Wikipedia defines “engineering”:
“Engineering (from Latin ingenium, meaning ‘cleverness’ and ingeniare, meaning ‘to contrive, devise’) is the application of scientific, economic, social, and practical knowledge in order to invent, design, build, maintain, research, and improve structures, machines, devices, systems, materials, and processes.”
And here’s the definition of “engineer” (also via Wikipedia):
“… a professional practitioner of engineering, concerned with applying scientific knowledge, mathematics, and ingenuity to develop solutions for technical, societal, and commercial problems.”
Having knowledge across a stack or several stacks, such as the distributed, MEAN, or ELK stack, is simply one aspect of what makes a good software engineer. An engineer today knows which technology to choose to solve a problem and how to use it well; keeps an eye open to better, possibly different, techniques and solutions; and thrives by seeing and living (at times) in the bigger picture that is the project, company, and community. It is important to realize that what you do fits into a larger stack: your company’s mission. An engineer shouldn’t just be full-stack, T-shaped, isolated, idolized, know everything, or open source. He or she should be an essential part of any business, with practical knowledge that forwards the development of ideas, products, and goals.
Understand and then solve problems
Don’t stop at being just a software engineer. If you want to take on a larger role in the business, consider becoming a software architect. Don’t solve for today’s problem; learn how to solve problems. Truly comprehending how a thing works makes manipulating it easier, optimizing a certainty, and blazing new ground very probable. Working through problems by understanding the principles will enable you to more ably work through obstacles in succession, leading you down the career path to being the decision maker for how your company will deal with each new technical challenge.
Hacking through a project will get it done, but taking the time to learn about the why and how of a technology provides you with information that will have an impact beyond the current situation. Finding out why a functional approach might be better than one that’s object oriented, or why a software architect chooses a reactive architecture over an immutable one, can give you insight into how to solve problems in general, not just the one that has you in its grips now. Figure out what DevOps really means and how it can help you. Get a solid grasp of the building blocks of programming languages, workflows, and interdependencies that you are working with, whether it’s building a website, optimizing a network, or fine-tuning a wearable device.
It doesn’t end with code, of course. Working with a team, managing individuals, and accomplishing tasks under budget and on schedule requires a level of awareness that goes beyond one’s own expertise. Being able to consider an issue from several different points of view is essential (have you considered how design plays a role? you’d better), and taking input from others is essential. Answers can be elusive with multiple team members, vying needs, time, budget, and language constraints, but answers must be found.
Integrate open source culture and code
The use of open source, both in technology and culture, is causing a reawakening of innovation in companies like PayPal, IBM, and Microsoft. Traditionally, open source has been known for strong, often passionate, communities that nurture, battle over, and improve a software project. To say that open source software is on its way to the enterprise would be wrong; it is already there, alongside its proprietary counterparts. Open source culture, however, is now just beginning to blossom. Open source in the enterprise is being seen in continuous integration, inner-sourcing, and incubator-type projects.
Let’s break this down a bit. No longer are enterprise software teams waiting until a project is feature complete to ship; improvements are made incrementally, and driven internally and externally as feedback is gathered. Inner-sourcing, a term popularized by Tim O’Reilly, describes using collaborative open source development techniques within an enterprise, and is now becoming standard practice. Microsoft has open sourced many of its core projects, like ASP.NET. Leading-edge projects throughout the industry are now being developed in smaller teams, not only in start-ups, but in enterprise. They are living in incubators that have been spun off from the main line of business, not tied immediately to strict budgets, and aligned with company goals further in the future rather than saddled with return-on-investment expectations in the same fiscal year. Google has Google X, which spawned Google Glass and is working on self-driving cars. While these two projects haven’t been successful and haven’t yet hit the market, respectively, you can be sure that we will see this technology incorporated into future successful Google projects. In fact, Google Glass 2.0 is now being worked on with an Intel chip.
If you aren’t yet seeing these changes in your enterprise, you need to lead that change. This is the new normal for the rate of change we are seeing in the tech industry.
Expand your notion of mobile
Mobile devices continue to multiply. Smartphones and tablets now come in every imaginable size; wearables are all over the place, from watches to networked blood sugar monitors; and integrated Internet of Things (IoT) devices like Nest are scattered throughout the home. These devices are the visible hardware interfaces to a vast network of Internet services and capabilities, including payment, location awareness, real-time analytics, and augmented reality. Engineers need to learn how to use that data to iterate and improve.
To label this segment of the programming world “mobile” is literally correct, but all too limiting. Work in this area reaches across hardware, web, data, and cloud computing (see Jon Bruner’s post on the convergence of hardware and software and Ben Lorica’s piece on data trends). Innovations are happening here, with speech recognition acting as a new command line — Google Now and Siri are providing not just speech recognition but sensor-driven predictive analytics. Near field communication (NFC) is enabling a revolution in payments. With this innovation has come an extensive ecosystem of service providers, APIs, libraries, and frameworks. The speed of innovation in this section of the technical community is mind-blowing, so be sure to keep an eye on what’s new because you might miss it if you don’t.
This is just our starting point
Everyone has work-a-day tasks to be completed, and innovation might not be at every turn, but it is there for those who can see it. We will provide the lens through which you’ll be able to better identify those opportunities. As ever, you’ll continue to see from us expert tutorials, well-thought-out solution frameworks, problem-solving techniques, and core fundamentals. We are starting new events, like our Software Architecture Conference with Neal Ford this March. OSCON (July 2015) is being reimagined so that we frame open source opportunities in terms of entire stacks for those in both start-ups and enterprise. We will be providing content via our weekly Programming newsletter; from books like Programming Scala, Effective Modern C++, and Becoming a Better Programmer; as well as video training, such as Introduction to Go Programming, Collaborating with Git, and Introduction to Java 8. Learning paths will be constructed on a variety of topics via Safari, along with the continued release of video and print products at oreilly.com that enable you to innovate. Create your own ground-breaking solutions, generate new problems to be solved, and think beyond the corner of the world you find yourself in.
I’d love to hear your thoughts, feedback, and recommendations. What do you think is important? How can we help? Please contact me via Twitter, Google+, or in the comments.