There is a language that lies quietly on the layer below the code, and is eager to be explored and discovered by everyone.

The Translation Bureau is a compilation team that focuses on technology, business, workplace, life and other fields, focusing on foreign new technologies, new ideas, and new trends.

Editor’s note: The programming language is tens of millions, and beginners are always entangled in which language to learn. Without tangling, the popularity of language is only a moment, and it can only be dominated by three and five years. To be eliminated, you must master the foundation of all programming languages. Software engineer Eric Girouard gave very useful advice on how to learn programming. This article is compiled from Medium, the original title is: The One Programming Language to Rule Them All

Senior Software Engineer: What programming language should I learn? How to learn?

Extended reading:

2020 and future programming trends: Rust will be mainstream, JavaScript is still strong

What is the most worthwhile programming language in 2019?

How to become a better software developer?

At the time of this writing, if you search “what kind of programming language should I learn?”, I can return 517 million search results. Each page constantly introduces the advantages of one language over other languages, 90% of which will eventually recommend you to learn Python or JavaScript.

But I want to be brazen once, I want to formally publish opinions that are different from the 571 million results. My suggestion is that the first programming language you should learn is logic.

Light knows how to code is no longer enough. This market has been crowded with training camp graduates, so that the position of “primary software developer” has disappeared. To be successful today, you need to know how to write code and how to use logic.Thoughts.

My first computer science course

The first time I came into contact with computer science was an elective course at the tenth grade. On the first day of class, I was very pleased to see that there were all kinds of ice cream and various sundae toppings in front of them. After everyone is seated, my teacher announced:

“Today, we are going to make a sundae. The condition is: you have to write a list of specific instructions on how to prepare the sundae – and then I will do it according to the order.”

This is no problem, I think, it’s easy. In less than a minute, I wrote a perfect sundae description:

Pour three scoops of blackberry ice cream into a bowl

Pour two tablespoons of hot chocolate into a bowl

Put the whipped cream in a bowl

Sprinkle chocolate chips and cherries on the sundae pouring head

Then my teacher, this is a cute metaphor for the computer, began to sneak me in a precise way. Because it couldn’t penetrate the hard outer shell, it began to lick the ice cream tray, but the lid was intact.

I am eager to enjoy a meal. “Okay, take off the lid first.”

“You didn’t provide me with these instructions, so, sorry, you can’t do your holy generation, the next one!”

Fast forward to the second try

Remove the lid and open the BlackBerry Ice Cream

Pour three spoonfuls of blackberry ice cream into a bowl

Open the hot chocolate and pour two tablespoons into the bowl

Open the cream and add it to the bowl

Chocolate chips and cherries sprinkled on the toppings of the Sundae

I’m sure this will work. I even went one step further and made sure that everything was opened first and then added to my masterpiece.

She (computer) opened the lid, took three spoons, and put them in the bowl. My immature sundae has finally taken shape. Then she opened the hot chocolate and put two tablespoons in my bowl. Please note that instead of two tablespoons of hot chocolate, two real spoons, no hot chocolate. My instructions are not specific enough – again. After all this was done and finished, the other hand gave me a bowl of ice cream with two metal tablespoons, a solid canister with whipped cream, and about 300 chocolate crumbs.

At this point I finally found out: the computer is a purely logical entity. It is not clear about the background and does not make any assumptions. It simply responds to a very specific set of instructions and executes it just right.

In the end, my production of the Sundae instruction set is a series of lengthy but necessaryDisaster:

If you are not ready, please open everything below: black raspberry ice cream, hot chocolate, chocolate crumbs and cream

Remove one from a bowl and put it in front of you

Pick up the ice cream scoop, one scoop each time, and pour three scoops of blackberry ice cream into the bowl. Put down the spoon after finishing

If you haven’t got a hot chocolate spoon, take two tablespoons of hot chocolate, one spoonful each time into the bowl, and put the hot chocolate down when you’re done.

Invert the whipped cream, hold the bowl nozzle with your finger for 3 seconds, then return the bottle to the rest position

Paste about 40 chocolate crumbs on the bowl and return the tool to its upright position upon completion

Remove a cherry from the cherry jar and elegantly place it on top of the sundae

Hand the sundae to the student with a spoon

The last point is very important. Without this, it will start eating my sundae.

This is the reality of computer programming. Provide a series of intensive detailed instructions for your computer. Essentially, this is what all programming languages ​​eventually break down into — instructions.

Professional path for software development

Software development is now too broad to be discussed as a single industry, just as the description of the “software developer” position is too broad. Developers with two disjointed skill sets can have the same market value, which means that the development of this line requires more than just coding. Skilled developers have a universal trait that is independent of programming: logic.

The best developers are experts in critical thinking. This is crucial because most software projects are documented and fragmented. They need a person with critical thinking to piece together messy information and fill in the gaps when needed. Developers who are behind in this area are people who cannot connect those points.

All of this will culminate in another bold statement: The foundation of computer science is, and will always be, the supreme coding power.

The popularity of language is booming. The framework will be abandoned and companies will mix and match their technology stacks to respond to changing needs. Is there anything that will never change? Foundation – the basis of definition is never going to change!

How to improve logical thinking

For those who can’t think deeply, consider using these tools to improve your procedural critical thinking:

Understand your runtime complexity

Also known as Big-O, the runtime complexity of a program can be expressed as the number of steps performed on any instance related to the size of the input (n). Keeping a record of your program’s runtime is the first step.

Learn about your data structure

Data structures are at the heart of every complex program. Knowing which structure to use under what circumstances is itself an art. Data structures are directly related to runtime complexity, because choosing the wrong structure can cause the program to come to an abrupt end. Finding a value in an array is as complex as O(n), which means that as the size of the input grows, using arrays becomes more expensive. The complexity of a hash lookup is O(1), so regardless of the number of keys in the hash, the time to look up the key in the hash will remain the same.

A person who has had an interview thinks that the search time of an array is faster than a hash. This is a direct signal that tells me not to hire them – so learn about your data structure.

Read more and listen more

Similar sites like Udemy, Pluralsight, and Codecademy are incredible resources for learning new programming languages. To learn the basics, you have to find books on general engineering concepts, best practices, and coding styles. For engineers, the most recommended books include Design Patterns, Refactoring, Code Encyclopedia, Code cleanliness and Programmer’s Way of Practice, etc., to name a few. Finally, each engineer’s desk should put a copy of “Introduction to Algorithms” for self-defense.

Practice!

You can’t be a violin master without pulling the violin. Websites like HackerRank, CodeWars, CoderByte, TopCoder, and LeetCode have thousands of challenges to test your understanding of data structures and algorithms. I found that the best way to use these sites is to solve the problem yourself, then host your solution on Github, then look at the top-level solution to this problem and see how others solved it. This reminds me of the last point:

Look at someone else’s code

The biggest mistake you can make in the software development process is to fight alone. Software development basically relies on the power of crowdsourcing. We work together to set standards, make mistakes together, and then slowly know what to use.(through a lot of failures). Taking the time to look at the skilled developer’s code will always pay off. Just make sure it’s good code.

The best advice I can offer is never to be ashamed of things you don’t know yet. As I mentioned, the industry is huge, the number of languages ​​is very large, and the content is very dense. To understand that it takes a lot of time and effort, and to be proficient, you need to pay more, and you need to pay more. I will tell you when I reach that level.

Translator: boxi.