Where programmers share ideas and help each other grow. All developers are welcome to submit stories, tutorials, questions, or anything worth discussing. The front page is curated by the folks behind @ThePracticalDev.
Have fun and don't be afraid to contribute, everyone's perspective is valuable! ✌️
Can you describe your experience with Elixir/Erlang/OTP so far? Do you have a rough estimate of the ratio of Ruby to Elixir being used for the backend @ NoRedInk? Do you see the company moving more and more of the backend to Elixir in the future?
Ask 5 Ws of Dev Experience:
1. Who are your tools? (tmux/vim? emacs? atom? xsort? concept mapper? toolkits? grunt/gulp? browser plugins? package managers? cli tools? interesting one-liners?)
2. What's your best/daily workflow? (What do you typically feature-branch for?)
3. When are your best times for achieving flow? (8-12? 4-11? nightowl?)
4. Where are your best places to work? (This is more about lighting and social conditions matching.)
5. Why do you not like X (some known existing tech of the company that involves tech debt of some kind or that the dev must conform to)?
Some developers come from a Computer Science background. Others, like me, never studied Computer Science in an academic environment.
In my opinion, the three main things for developers without a Computer Science background to study are Data Structures, Algorithms, and Lambda Calculus. Why these three?
Data Structures. These are the building blocks of data inside of a program. There are many different types of data structures, both simple and complex, and all of them have advantages and disadvantages (in terms of reading, writing, and space complexities). When a dev has to model a problem domain, he or she will first reach for the a data structure. It's good to know the pros and cons of different types of data structures and what they can offer in order to make the best choice for the problem domain. Understanding data structures will help a developer to solve problems quickly and efficiently using the right tools; in some cases, it will also give a better understanding of how data is mapped to computer memory.
Algorithms. Computers are fast - very fast - but solving problems still takes time. Devs should understand algorithmic complexity, know the advantages and disadvantages of specific approaches, and cultivate the foresight to make algorithmic choices based on input and time. More importantly, devs should be able to identify problems which can be solved (trivially or non-trivially) versus problems that cannot be solved at all within a reasonable time period. Algorithms, in conjunction with Data Structures, are the meat and potatoes of our programs.
Lambda Calculus. Modern languages have many design patterns - OOP, functional, declarative, and so on - but Lambda Calculus is a basic, simple model of computing that lends itself very well to any developer who wants to improve the way that they read, write, and understand code. Gaining an understanding of Lambda Calculus can allow a developer to think in terms of inputs and outputs, which lead to further inputs and further outputs. Understanding the compositional, functional style of Lambda Calc can make many problems much more accessible. With Data Structures and Algorithms, Lambda Calculus can elevate a developer to the next level.