Often the road(s) taken to learning something is usually clear cut, unless if you happen to undertaking becoming a programmers (aka developer, coder, coffee conversion engine). Even with a particular language or technology stack that is not often quite as linear as one would hope.
In this case I want to focus on just a language, which happens to be the main topic of this blog (how dare I). So usually, people tend to become what they are either through planned coincidence – studying to be become a software engineer – or through some other non traditional ways.
Fog of war anecdotes
One complaint I hear from beginners is how they tutorial, book, site etc they are using has come to an end and most inarguably feel like they’ve not learned anything. This is the experience of most, usually ones who’ve not had previous exposure to programming or similar… er, experience. It is normal, you can’t and shouldn’t expect to grasp something, let alone master it, after just one pass. Most of the pratice was having to complete a few lines of code with the rest being auto generated or copied from previous lessons.
What this should be is a primer, nothing more than an introduction to the topic. Browser based systems are great for on the go, quick stab at a tutorial or solving a few algorithms, but for the most part, everything is setup for you – the environment, files etcetera.
You aren’t going to be able to retain much where you only altered or added very little in terms of new content or ideas. But don’t downplay it, it’s meant to be an easier way for beginners to get used to the terminology and ways. Use it for what it is.
Fog of war anecdotes
There was nothing but fog of war with very low visibility in all directions and the radius of view very small.
Often times you will come across books and material which aren’t exactly great and would have grandiose titles such as learning something in 24 hours – the print version of click bait. But it serves to remind that this is the nature of the landscape. I can’t definitely say if this book is good or not as I haven’t gone past probably the first half of chapter one so you’re intrepertation might vary.
One skill you need, apart from being able to learn to shorten the time to learn and absorb new things, is that you will inarguably also have to separate the wheat from the chaff.
Now this is probably the first one that I came across that had substance. It seemed content heavy but did delve into aspects and nuances of the language which would lead to more than just a superficial glance.
The step by step nature, as the title suggests, does walk you through not only the explanation but also practical demonstrations which helped to see what each concept was referring to.
Fog of war anecdotes
If codeacademy was the drive down to the nearest village to get supplies, this is the trip up to the basestation of K2 to get started.
A very noble effort to not only instill the basics but also almost all concepts and theories that would be required to become a full stack developer.
Fog of war anecdotes
This site also suffers from the “I’ve completed it yet don’t know what to do next or remember next to naught” syndrome. The caveat is as usual with code along sites – everything is setup for you and you might only be required to change or update certain parts.
There are projects at the end of each, some of which might seem insurmountable to those with very little experience or problem solving aptitude/attitude.
The algorithms challenge is strictly solve it yourself and has taken me atleast two iterations to be able to actually be self assured to be able to approach and solve them. The very first time I broken through 4-5 and then was stuck beyong relief. The next time I came back I was able to more easily break down, assess and try and solve it. Words of wisdom – console.log is your friend, for anything you think is happening, usually it’s not.
There was an issue of content updates inbetween sessions – usually for the slower of us who take several weeks, if not months, to accomplish each section as opposed to those who just seem to be able to complete it anywhere from 3-6 months, while also taking care of a business, children, side taco truck business, enrolled in med school, computer science undergrad, painting and this site.
So the problem was you would either have to go back to complete the newly added bits (for those of us who hate having an unticked box in the midst of other ticked boxes). Or there would be a complete revamp of the site (atleast 2 that I can remember) or even a completely different beta site which seems more coherent and worthwhile. End result being you switch and completely ignore the one you started. At this point in time I have probably restarted, from scratch, atleast 3 times (including projects) and one attempt at beta which seems to have been locked down so had to come back to the original. Ending ramble now.
Certain aspects will aid immensely in how you start programming or handling tasks, but that is in comparsion to practice you’ve been putting in. The content of this subject to the same as all others, you can’t just breeze through – consistent practice and repeptition is needed.
You will need to take notes, try out the topics mentioned and revisit to reinforce the concepts mentioned here – I actually blog about topics to get my head around them and as references later on [1, 2, 3]. Especially when it comes to topics such as bind(), apply() etc which you might not readily see their utility or how you might incorporate into your repertoire, especially if you’ve never programmed at this level before.
Fog of war anecdotes
In terms of fog of war, this one would seem to shrink whatever increases in sight you have gained as the topics mentioned might not seem entirely relevant to whatever you might have encountered so far. But that’s just misleading as you’ve not yet experienced such advanced usages and capabilities. So the myopia you experience is only because you have levelled up and into an expanded realm where your latent abilities seem lacking in comparison.
By being consistent and journey through, even though where you are right now doesn’t make much sense what needs to be done and where to go will get clearer.
“One does not accumulate but eliminate. It is not daily increase but daily decrease. The height of cultivation always run to simplicity.” Bruce Lee.
The web version was done using flask – a python based micro web framework. Most of the logic required was done with the desktop version, which was just simply transferred to the server side code and worked without a hitch. The snag was that the user input had to be sent via a HTTP POST message that would be picked up by the flask routing system, processed and then sent back, not ideal in of itself but stuck with it as I couldn’t find any alternative. The problem was that the post message had a size limit and thereby dropped anything over 1567 rows…
…what can be done in the browser should be done in the browser.
A quick search of something similar to Python’s lstrip or rstrip brings up several articles which talk about either using the trim() function introduced with ES5 (ECMAScript 5), extending it using the prototype chain or, prior to that, just crafting your own function using regex expressions.
It just so happens that there are native functions built in that accomplish what I need –
String.trimStart() – Remove trailing spaces from the start
String.trimEnd() – Remove trailing spaces from the end
It’s great for removing any and all trailing white space, including new lines which was causing trouble with my output. However, unlike their counterparts in Python, these functions do not allow passing any character inputs as filters. For e.g. in python, specific characters such as trailing commas or formatting tags like carriage returns or new lines can be passed for removal
Convert to CSV
In my case my code would append a space followed by a comma ” ,” to the end of each row input. This presents a trailing comma which the Python rstrip would take care of in one swoop, of the fell kind. However, thanks to finding the trimEnd() method, the solution that presents itself is very simple if not crude. Come of think of it, I could have easily solved the problem of trailing space with just the trim() function. Anyway here’s the sols:
After having to troubleshoot why my slice wasn’t working as it should – there was still trailing white space – I came to the sobering relisation that the split function does in fact split everything into a new comma separated list (doh). Anyway the extra formatting on line 10, as it was renamed to later on, does exactly that now, but wasn’t needed. Ah well, hindsight is 1 they say…which is what I calculated 20/20 to be – true.
So here’s to polishing off this project with just the bare minimum functionality for the moment, which is convert to CSV.
I try to keep in good programming shape same as keeping your body in shape, by working it out. And just like exercising your body, the more you exercise your programming skills – which in itself isn’t that much removed as it is also a psychosomatic experience more towards the neural range – the better you get and find higher nuances and abilities which seem to appear out of nowhere. The inverse is true, you stop and results slowly deteriorate.
So to that end these are the main things I proactively try to do daily:
- Algorithm practice – Basic, intermediate and advanced sections on FreeCodeCamp
- Codefights – something I float towards when I get stuck on FreeCodeCamp (currently Python)
- Functional Programming Meetup with a group called Functional Kubs**
* This is a really really good course that dives beneath surface to examine the innards of the engine and how it feeds through to the idiosyncrasies of the language to exploring a library, building your own to ES6. First few sections are more theory laden and even after that you’ll need to follow along in an ide and repeat to keep pace and retain (you’ve been forewarned). Also I bought the course as part of another deal and not on Udemy but it’s the same author and seems to be same content.
Now just want to touch upon why each of these types is relevant and how their synergies would yield better returns to learning and improving.
Website based Algorithm practice
This is crucial as most sites offer a varied mix of questions to try and solve. They also include tests which check various inputs to verify if the solution you passed it is actually valid. Downsides include that most of these are in browser and you miss the setting up and growing (head wrecking) potential of setting up project structure yourself. Another point is that unless if you know how to debug your own code or use browser tools you’re often left to the mercy of the sites test suites to verify your code – which might actually be right sometimes but a glitch or something might not let you pass.
One of the key issues with tutorials online is that they often tend to be geared towards the beginner and then go off explaining the basics ad nauseum then whatever tangential exposure the author(s) feels relevant. These are crucial in the beginning but however might be lacking in actual real world uses or scenarios – especially when it comes to higher level language function and usage.
Higher level courses like these are imperative for moving beyond a certain level where you might find yourself stagnating. This could be perennial beginner (moving on from one intro to another), tutorial collector (similar to the first one but often more project based work). So this would improve your semantic programming capabilities by improving your syntactic knowledge and structural paradigm.
Caveat, unless an ample process and repeated practice is used this will tend to fall into the tutorial ghosting syndrome (you pass through it or vice versa without hardly any residue). The onus is on ourselves to absorb the content and try elevate our own skills and by using it at higher levels of difficulty.
Meetups for programming
This is a great way to not only learn how to program but to network and meet people who not only share the same interests as you, but would have vastly different and varied experiences and skills.
The one I joined has a particular emphasis on meeting and splitting off into pairs and solving a programming challenge in an hour. Along with hearing about, being exposed to new languages or paradigms, you actually might start using a new language or an approach which otherwise you would never have come across. And the time constraint enables you to realise how to structure your approach and tooling for most challenges and gauge your own efficiency or lack thereof.
Of course to everything there is a downside. Often in the form of social settings or maybe not having as much skill as you’d like (or thinking that you don’t which is worse) to not being able to physically make it to the meeting. But suffice to say the group I have is very welcoming, and although I was totally out of my comfort zone, programmatically, it gave me, in a very short session, areas to focus on to improve or learn further.
So this is my primary tact to practicing and improving, Let me know in the comments how you go about structuring your daily-weekly programming life. Keep on coding.