[OT] How to improve my programming skills?

Adriaan Renting renting at astron.nl
Fri Jun 2 04:16:03 EDT 2017




Adriaan Renting        | Email: renting at astron.nl
Software Engineer Radio Observatory
ASTRON                 | Phone: +31 521 595 100 (797 direct)
P.O. Box 2             | GSM:   +31 6 24 25 17 28
NL-7990 AA Dwingeloo   | FAX:   +31 521 595 101
The Netherlands        | Web: http://www.astron.nl/~renting/



>>> On 1-6-2017 at 17:26, Mirko via Python-list
<python-list at python.org> wrote: 

> Hello everybody!
> 
> TLDR: Sorry for OT. Long-time Linux geek and hobby programmer wants 
> to improve his coding skills. What's most important: project 
> planing, algorithms and data structures, contributing to FOSS, web 
> development, learning other languages or something else?
>
Learning languages is something that sort of happens by itself as times
change.
 
> 
> Sorry for posting such a (long) off-topic question, which even is 
> partly even more about psychology, than about technology. But I'm 
> mostly using Python and Bash for programming and am reading this 
> mailing list/newsgroup for many years now, and hope it's Ok (feel 
> free to direct me somewhere more appropriate, as long it's an 
> equally helpful and friendly place).
> 
> I'm looking for a way (*the* way, ie. the "BEST(tm)" way) to improve

> my coding skills. While I'm a quite hard-core computer geek since 25

> years and a really good (hobbyist) Linux-SOHO-Admin, my programming 
> skills are less than sub-par. I wish to change that and become at 
> least am average hobby-programmer. I'm an excellent autodidact and 
> in fact, all what I know about computers is completely self-taught.
> 

The problem with being an autodidact is that you usually have big gaps
in your knowledge that you're not aware of.
The first question is if you want to be a better programmer or better
software engineer?
What I mean with that is do you want to make your code more robust and
efficient or do you want to learn how to design better code? The first
is very much about algorithms and the math behind them, while the second
is more about tools and methods to help you design.

> Now, the problem is, that I'm 41 years old now, have a day job 
> (which hasn't much to do with advanced computing stuff), friends and

> all that. There is little time left for this undertaking (something 
> like 5 - 10 hours per week), so I'm looking for the most efficient 
> ways to do this.
>

If you have little time, it will take a longer time to get better.
 
> I identify the following problems which could be worth improving:
> 
> - I never sit down and plan anything with pencil and paper, 
> flowcharts, UML or anything else. I just fire up Vim and start 
> typing. That works (albeit slowly) for simple programs, but as soon 
> as the project becomes a little more complex the parts and 
> components don't match well and I need to botch something together 
> to somehow make it work. And in the resulting mess I lose the
interest.
>
Any hour designing usually saves you many hours in coding.
UML is popular, but I'm a fan of Yourdon as well.
Design really starts with writing down what you're trying to do (use
cases),
why, how and within what limits. You get better through experience,
especially
when doing it for the first time, people often forget a lot of the
limits they have.

Part of it is also software management, in this case mostly on
yourself.
One of the books that's the foundation there is "The Mythical Man
Month".
It's old but it would help the industry if everyone had read it.
 
> - I never learned algorithms and data structures. I know *what* 
> (linked) lists, dicts, arrays, structs, and trees are; what binary 
> search or bubble-sort is, but I never really studied them, let alone

> implemented them for educative purposes.
>
You're touching on the difference between information and knowledge.
You know they exist, but they're not really part of your knowledge.
If you want to get better at programming, you need to learn more about
algorithms,
making excercises and actually implementing these will make them part
of your knowledge.
Some general math will also help, it really helps if you can analyse if
the code you're writing 
uses a linear or quadratic solution to your problem, and how it could
be rewritten.
At a higher level, there are also things like design patterns.
A standard book on that would be Design Patterns by Erich Gamma,
Richard Helm, Ralph Johnson en John Vlissides.
 
> - When it comes to coding, I'm heavily shy and unsure. I really know

> my stuff when it's about Linux-SOHO-Administration, but when trying 
> to contribute to FOSS projects I always hesitate for several reasons

> (somehow I never find those low-hanging fruits that everybody talks 
> about; either it's super-easy or to difficult.)
>
Sounds like you have typical sysadmin skills, but not really
programming or software engineering skills.
 
> - For my day job (which is absolutely not my dream job) it would be 
> quite useful to know web design/development, especially WordPress 
> stuff. But web programming always feel like being trapped in a 
> mangrove jungle, with all those browser-specialties, different and 
> incompatible JS-engines, PHP versions and all that. I'm almost never

> in the mood to learn web development.
>
Any programming outside academia needs to interface with the real world
and thus will encounter stuff like that.
 
> - Beside Python and Bash -- which I both know rather well (for a 
> hobbyist at least) -- I only know a little C, some LUA and a tiny 
> bit of Scheme.
>
I found it quite insightful to learn a language where you have to do
your own memory management, and a low level assembly language as it
really helps in understanding how to write efficient software, even if
you don't use it much afterwards.
 
> - I'm very hard to motivate, when the issue or topic doesn't 
> interest me much. I know some tricks to increase my motivation in 
> such cases, but don't use them enough.
> 
>
You need to find a problem you really want to solve.
I started out writing tools for games as a teenager because I wanted to
have Simcity, Civilization or VGA Planets do things.

 
> 
> What do you think, which of the problems would be most important to 
> overcome? What would be the most efficient way for improving my 
> general programming skills? Do you have any other suggestions or
tips?
>

The most efficient way to learn is by being tought by a good teacher.
 
> 
> Much thanks for your time!
> 
> Mirko




More information about the Python-list mailing list