Software

The Good Programmer Definitive Path

Posted by admin on November 13, 2017
Programming, Software / 578 Comments

1. Focus on fundamentals

Focus in structure, architectural point of view, abstract thought instead of specific language implementation. Spec is half development, to have a clear vision before you code everything is half the work. Think in paper, get use to the whiteboard, develop a solid process of thought with the focus in solving the problem.

2. Code every day.

Every day, at least in paper, code something. Really, every day. Code for fun, code for progress, code for learning, not just for work. Setup a personal project, It could be some repository for algorithm solution exercises or a personal website, but work in it as your own pace, no pressure, all enjoyment, all reward.

3. Tune your ride.

Introduce your favorite tools and make them available for you in a easy way. Customize your editor, IDE, compiler, automate some scripts, include your favorite plugins, make it portable, automatic, pimp your ride, honey your axe every day, pimp your ride, get ready your tools, they’l become a part of you as a professional coder.

4. Learn management.

It will be more useful than you think. Basic management is as follows: Plan, Organize, Execute. Plan, Organize, Execute. And it’s repeated over and over in project, program, risk, time and every other kind of management. Always plan first, organize and then and only then execute. Get used to do this and your life, in every aspect, will be much more pleasant.

5. Fail soon, fail quickly, fail once.

Make mistakes. A lot, as sooner as possible, and make every mistake just once, learn from every mistake and make a system so you won’t make the same mistake once. For example, a very commonly fatal mistake is to forget the where in an update/delete query. So make a system to write the where first, then the command. Soon you’ll never forget the where, even if you write the sentence from top to bottom.

6. Pay no attention to critics. Specially from yourself.

Internet is full of resources to learn to code, but also full of trolls. If you make a “dumb question” to a group or forum, many people will just criticize you instead of help you. Those people have a problem, an emotional problem, they need to made someone else feel bad because they feel bad themselves. Made your part though, made your research, take some tutorial, have a background and make specific questions, don’t ask to a group something that you can ask google (or duckduckgo :)). But if some people try to bully you, just ignore them. Many will try to induce you the “real programmer syndrome”, that you’re not a “real programmer” unless you code free, just for fun, you know linux and do “all-nighters” all the time. The moment you make your first program you are a “real programmer”. The moment you get paid for a piece of software you code you are a “professional programmer”. Those people have the “atlas syndrome” and want you to feel like them.

Avoid criticize yourself. You learning and will improve everyday, if you code everyday. Avoid fall for the “imposter syndrome”, you’re you, just be honest about what you can’t do. If someone ask you something you don’t know, just plainly tell them, “I don’t know. But I will find out”.

7. Fear is your worst enemy.

You may think what you know enough to make a living, not updated, that you’re not learning “the right language”, that you have to learn what the trend is, or even try to predict the future. This is plain insecurity. What you’re saying is that you feel insecure, that you value stability over progress, that you are more worried about yourself than about deliver the best of you to others, and that’s what is all about in any job, in any field, in any industry.

Economics is no more than an exchange of values, if you want money, you have to deliver something valuable to your client, to your company or to your boss. So focus in solving problems and provide value, focus in systems not in technologies, improve yourself, become proactive and sharpen your abstract thought, in order to learn things and solve problems will be easy for you.

You know, the fundamentals are the same in every language and platform, develop an architectural point of view instead about worrying that if the trend change language you’ll be out of job. If you become good in solving problems and delivering value, you’ll never be out of job, I assure you.

8. Innovation and creativity must be your mantra

How can I make this faster? How can I make this more efficient? How can I improve this? Develop the habit to ask yourself these questions every time you finish coding a piece of software and soon you’ll be progressing exponentially.

Learn, apply, improve. Learn, apply, improve. It doesn’t need to be a major breakout improvement, the sum of all small changes makes wonders, what is important is to develop the habit of continuous improvement, to build a system, to grow a sense of awareness and promptness.

Some days you’ll be on fire, some days will be lame, but do it anyway. Do it every time you apply something, and brick by brick, soon you’ll build a rock solid wall of knowledge, a set of skill, a profitable attitude. That alone counts for itself.

9. Give. Give frequently. Give more.

Give the most you can to the most possible people. Write some blog articles, make a video tutorial, code a plugin or a library and share it with the community, engage in groups, forums, open source projects. The more you give, the most value you return to the community, the more relationships you build, the more experiences you get the more you’ll open your mind and heart the more passion you’ll have, it’s unavoidable.

The more people you help the wider your vision, the bigger your world. You’ll get to know fantastic people, and the community will acknowledge you, you’ll get to participate in bigger and important projects, you’ll build a kick-ass resume and an amazing project portfolio before you even realize.

10. Trust your gut

Following this path will get you to a wiser, kinder version of you. Unavoidable you’ll be a mature coder, so trust your instincts, you’ll get a kind of sixth sense in your field, and awareness, super conscious mindset. It’s not magic, it’s the expertise of the craftsman. This is a system to get you there, expertise is no genius, or prodigy, it’s something you build by yourself and nothing can take from you, so trust yourself.

11. Keep going.

One more try, one more line of code, one more unit test, one more project, until you reach the top. Top-notch is achievable. Code every day. Give every day. Have fun, in a daily basis.

12. The Bonus: If you have no patience…

This approach takes time. Lots of it. Specially the young ones may have not the patience and are looking for a faster way to achieve success. My advice is to develop patience, but if you’re decied to find a quicker way, here you have it: Focus in give. Give more. Then give more to more people. Work like hell the way you want. If stress you choose, if your strategy is to try shortcuts and do a lots of all-nighters like crazy, and nothing I say will change your mind, then go ahead but never ever forget to focus in give. Avoid to close yourself, lock yourself in your ivory tower, focus in winning big by give the most value you can, and the most value you can give always is something that solves a problem to others.

Matter very little the technology you’re using or the complexity of your code, you can’t deposit pride in the bank, only money. Focus in helping your client, your boss, your company in a way than can be automated, repeated or that your solution will permanently solve a big problem. This way you can not be mistaken. If only one thing you take from this article let it be this: Focus in winning big by giving big.

Tags: , , , , ,

The Principles Of Programming

Posted by admin on October 12, 2017
Software / 2 Comments

“Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter.”

 – Eric S. Raymond, Open source defender

The Principles of Programming are:

  1. Everything is about communication.
  2. Every program models a reality.
  3. Programs handle data.
  4. Every program can be reduced to a command list.
  5. Every program can be reduce to Input – Process – Output.

Principle 1: Everything is about communication

Everything is about communication, between us and the computers and between programs that run in them. It’s all about communication, you tell them what to do and they answer you, you speak to them in a way they can understand and they communicate the result to you in a way you can understand.

Whitout communication there’s nothing. Can you imagine the modern world without the Internet? We’d be using the “foot network” still. Well, Internet is a bigger scale of what happen inside the computers. A program have to communicate with many other programs in order to everything runs smoothly, from open a file to send an email, everything is communication.

Principle number 2: Every program models a reality

Have you made a plane’s model or a ship’s model? Basically you make a plane, emulating the reality. That’s the same with the programs.

Think about the most used operating system by personal computers: Windows. At the beginning, Windows was made for office workers, everything in its environmente was designed for the sake of user familiarity: The desktop, the calculator, the folders, the files, etc. Early versions of Windows even used to have a special folder called “Briefcase”, where you could put the files you need in travels.

The whole Windows software use to model a reality: The office workers reality. Every moder application model a reality, from the home software through Office Suites till the ERP’s that models business administration, and the virtual relity video games, that model a sensorial reality.

Every program you write will model a reality. To the process of take a reality, separate it in parts and create a model we call it abstraction.

Principle No. 3.- The programs handle the data, information manipulated by the programs

Tongue-twister? Not, but almost. Making a clear difference between the applications and the data is fundamental in programing. A clear example is MS Word: Word.exe is the application, the file *.docx is the data. The computer programs execute commands and calcutations with the data. The data files are storage for structured information.

The diferentiation, altough obvious, it’s very importan because allow us to separate the reality thart we’re going to model it in two fundamental parts: The data and the computer program, and believe it or not, in the professional but non-technical word, causes confusion.

 

Principle No. 4.- Every computer program can be reduced to a sorted list of commands.

Every application is no more than a command list, really. Any program, any language, for example, a simple sum operation, the instructions will be like the following:

  1. Get the operands from the user.
  2. Execute the sum calcultation.
  3. Show the output.

This is a list of instructios, commands, that must be executed in that specific order for the computer to do its work properly. Change de order or skip one and the result will not be the same.

Principle No. 5 Every program is based in an Input, a Process and an Output

Every computer program take an Input (string, numbers, files, etc.), applies them a Process (arithmetichal, logical, financial operations, etc.) and produces a result, an Output (screen messages, a file written, an email sent, etc).

 

Any more complex program can be compound of many program or functions that can be reduced to the same Input -> Process -> Output.

The sum program is a good example:

  1. Take an input (the numbers)
  2. Applies them a process (the sum calculation)
  3. Produce an output (the sum result)

 

Every time you have problems in software development, take a deep breath and return to these principles, they will light up your problem and surely you’ll be able to find a solution.

Next step is understand how computers work, and then how the programs work too, in order for us to know what are we doing when we code and remove most of the gray areas, but before, a quick reminder:

  1. Everything is about communication.
  2. Every program models a reality.
  3. Programs handle data.
  4. Every program can be reduced to a command list.
  5. Every program can be reduce to Input – Process – Output.