How to be Successful in a New Development Role
There are a few misconceptions about what developers should know before going into a new development role, but the biggest misconception is that the developer should know a wide range of programming languages and be an expert in all of them. But, since the fundamental concepts of programming are shared amongst all the languages like data structures, algorithms, coding semantics, etc., being a solid programmer is much simpler than many people think.
One of the traits you need is to be a master in one programming language. This consists of knowing most of the coding semantics of the language, the internal libraries it consists of to make your work easier or more efficient, and the strong points and weak points of the language. Some extra knowledge of the language will help you transition and understand other language structures. For example, the high-level programming language, Python, is actually written internally in C. Because Python is written internally in C, the quicksort algorithm in Python is actually a lot slower than it is supposed to be unless the Python code is compiled and run in a C environment. Knowing some of the history and internals of the language will help you gain a better understanding of the language’s foundation. Speaking of algorithms…
Another trait deals with have a basic knowledge of algorithms and how to come up with your own depending on specific tasks. Let’s take sorting books in a library alphabetically as an example. The first approach should be identifying which known algorithm will work best to solve that particular problem. After narrowing down which sorting algorithm would work best, the next step would be if you can come up with something more efficient in that specific scenario. In most cases, particularly with sorting, known algorithms will be the best option, but sometimes there may be edge cases that we would have to account for and to tweak the algorithm accordingly.
To take the library example more literally, let’s say that you are a librarian and 1,280 books were just shipped to your school library (not in alphabetical order) and school starts tomorrow which is when all the students will flock in to check out books. Therefore, you have less than 24 hours to finish sorting those books. How can you sort the books in a timely, orderly fashion?
Naive (simple) solution: Bubble Sort – take the first pair of books and compare if those two are in order, if not, then swap them. Then move onto the next pair, and repeat. Eventually, you’ll find a book that should be in the last position and it will bubble to the end of the line, hence the name ‘bubble’ sort.
This is simple but slow.
You’d make 1,279 comparisons in the first round, then 1,278, and so on, adding up to 818,560 comparisons.
If each took just one second, the process would take over nine days.
Insertion Sort – start by sorting just the first two books. Then, take the third book and compare it with the book in the second spot. If it belongs before the second book, swap them, then compare it with the book in the first spot, and swap again if needed.
Now you’ve sorted the first three books. Keep adding one book at a time to the sorted sub-line, comparing and swapping the new book with the one before it until it’s correctly placed among the books sorted so far.
This is called Insertion Sort.
Unlike Bubble Sort, it usually doesn’t require comparing every pair of books. On average, we’d expect to only need to compare each book to half of the books that came before it. In that case, the total number of comparisons would be 409,280, taking almost five days.
Quicksort – First, pick a random book. Call it the partition and compare it to every other book. Then, divide the line by placing all the books that come before the partition on its left and all the ones that come after it on its right. You’ve just saved loads of time by not having to compare any of the books on the left to any of the ones on the right ever again. Now, looking only at the books on the left, you can again pick a random partition book and separate those books that come before it from those that come after it. You can keep creating sub-partitions like this until you have a bunch of small sub-lines, each of which you’d sort quickly using another strategy, like Insertion Sort.
Each round of partitioning requires about 1,280 comparisons. If your partitions are pretty balanced, dividing the books into 128 sub-lines of ten would take about seven rounds or 8,960 seconds. Sorting these sub-lines would add about 22 seconds each. All in all, this QuickSort method could sort the books in under three and a half hours.
But there’s a catch. Your partitions could end up lopsided, saving no time at all. Luckily, this rarely happens.
These sorting algorithms aren’t the only ones that would be used in this situations. Radix and Bucket sort could be useful as well because of how easy and understandable it is to use these.
As a person working in technology, don’t get behind the times. Technology will constantly innovate and grow, as well as programming languages and how it is structured. To keep up with the fast-growing tech field, each developer should try to branch out to newer languages that could possibly replace legacy code in the near future and work on refactoring old code. There are also paradigm shifts in the ever-growing development world where doing one thing used to be cool and easy, but a new way will just take over and be even hipper.
Programming languages always update and software will become outdated or deprecated if it is not maintained consistently. Therefore, being very adaptive in the environment that you work in will help to keep your software in tip-top shape.
Throughout the evolution of the computer science field, there are waves that go in and out where the business will be booming and all these companies will race to see who can make the best and biggest technologies. The previous wave before our current one was mobile applications. The number of apps in the App Store and Play Store grew exponentially during the last 5 years as the Google Play Store grew from 1 million apps in July 2013 to 3.3 million in September 2017. As for the App Store, they came from 1.2 million apps in July 2014 to 2.2 million apps in January 2017.
Relating to the current events, the new innovative wave right now that companies are trying to race to master is machine learning/artificial intelligence and IoT, or Internet of Things. Google is really pushing machine learning heavily in their new products and all the heavyweight tech (software/hardware) companies are joining the bandwagon of making many smart home devices now like Amazon, Google, Dyson, Logitech, etc.
These new waves have actually made the cyber world a little more dangerous. With every advancement comes the delay and neglection of making these applications not very secure. Companies are funneling money for fast outputs of products, but not investing in possible attacks that could potentially ruin the reputation of the entire company as a whole. Making IoT and mobile apps is a whole different story to tell and too verbose for this blog.
Specialize in a field of computer science to help the tech be on top of its game in all fields.
Cybersecurity – helps software be secure from attacks and always be on the lookout for vulnerabilities because no software is 100% secure since info has to go in and out.
Infrastructure – helps the flow of data have structure and be organized
Frontend – makes everything pretty on the outside
Backend – makes the pretty stuff work and serve a purpose
Expand your knowledge by going to tech/developer conferences like Black Hat, SXSW, OSCON (O’Reilly Open Source Convention), for web development, mobile apps, cybersecurity, etc.
Talk to other developers to bounce off ideas, brainstorm, and innovate with to find different ways of doing things.
Be conscientious of security. There will always be a chink in the armor. If a software was 100% secure, that would mean that info cannot leave or enter (which would label that software useless). If information is being passed, there will always be a vulnerability somewhere. Nothing is perfect.
The ‘hush hush’ details in becoming a popular developer at PMG is that you have to be eager to learn.
Some other recommendations from the team are,
Take matters into your own hands and balance the work and training ratio.
Learn what work you will be doing, but also know what the other teams do because our job is to make their lives easier.
If you don’t know anything, take initiative to ask questions and be willing to learn and admit any mistakes you may stumble on.
Stay ahead of the curve by knowing Go, React, or PHP, if not, then it doesn’t hurt to learn. Some other recommendations from the team are,
Silence is death. Always communicate.
Keeping your fellow developers in on the loop of what you are working on helps you stay accountable for your work and opens a bridge for others to help you out as well on a possible more efficient way of doing things.
Know how to appreciate programming memes.
Sign up for weekly articles & resources.
Posted by Jinwook Kim
Posted by Chris Alvares
Posted by Eric Elsken
Posted by Evan Wooten
Posted by Abeer Thomson
3 MINUTES READ | June 6, 2019