Dev's background?

I’m currently doing some soul searching regarding a career change. I’ve always like a variety of computer related topics, such as programming and databases, but have only a rudimentary understanding of those topics. I don’t have many overly useful computer skills. I’m now thinking about educating myself on the side, first with fundamentals of computer science, programming, algorithms, and later specializing in whatever seems interesting.

I admire the work done here on the safe network and was wondering if any of the devs, including David would be able to share a bit about their educational journey. What is it you studied in school? What did you do by yourself to reach the point you’re at right now? What are some resources you’d recommend someone who’d like to follow in your footsteps?

16 Likes

My biggest learning has always been to follow what I want. So perhaps seek out what interests you most and do that.

At the same time learn how to learn - which I guess is a combination of not underestimating what you can achieve with your own dogged hard work and focus, and knowing when it’s best to ask for help. You learn this balance by solving things, and when you think you’re stuck taking a step back, then trying again. David might like to quote somebody in that one. :wink:

But the thing that has always paid off for me is to do what interests me, rather than what I think I should do or somebody else advised. I always take that on board, but it has never got in the way of something that felt interesting. Willingness is key - I’m lazy unless I want, so I have to want. You may have a different personality of course, in which case you need to understand how you differ from this and how best to drive yourself where you want to go.

My journey was specific to my time - no Internet, harder to find information or help, so I had to do many things on my own. But I love solving problems, always have, so that was just part of the fun. Today you have the Web and lots of people available to answer and help out, so you may find it harder to develop the problem solving skills that allow you to go deeper into something, but then again maybe they are less necessary.

I’m interested to hear younger folks experiences on the qualities and attitude that helped them.

Since there are so many ways to go, so many resources to select from, don’t worry about choosing the best. There isn’t a best, everything is the best because everything will teach you something that will one day help you. So if I were you I’d jump in wherever I was most interested and explore until I find something more interesting, or get hooked on an idea that I just can’t let go of (like SAFE Network or something I want to build on it).

Good luck and have fun. If you are having fun you are doing something right! :slight_smile:

18 Likes

I have a M.Sc. in physics :wink: We had some programming classes, but definitely not enough to become an actual developer - which brings us to the second question…

Programming in my free time, a lot of it. I became interested in programming when I was ~13 years old, started with some simple DOS programs in Pascal, moved to C/C++ and learned x86 assembly along the way.

Note: this might not be as relevant today, as most of software development has been taken over by high-level languages with managed memory, but I feel like learning C/C++ and assembly really helped me understand how computers work and actually become a better programmer.

This was enough to get my first job after the university, which was actually in Python, and I learned it on the job. Before that, I had some kind of internal resistance against “modern” (which mostly meant: managed) language, I felt like I don’t have enough control if I didn’t allocate/free memory manually - this job changed that, I fell in love with Python and started appreciating the productivity it brought. It also made me interested in what other languages had to offer, and I started picking up bits of this and that (Java, C#, Haskell…).

Then Rust reached 1.0, I started reading about it and became fascinated by it, learned enough of it to be comfortable putting it on my CV, a recruiter working for MaidSafe found it, and here I am :wink:

The Internet! Choose a language, google tutorials about it, and start writing simple programs!

Start with something really simple, then think of features you would like to add and research how it can be done. For example, one of my first bigger projects was a DOS program implementing a Vigenere cipher (look it up, it’s really simple). I started with something that just asked for text and a key, then added a menu, an option to save and load data from files, things like that. Gradually learn more advanced things (for example GUI: creating a window, controls, handling events…), and after some time you will be amazed how much you learned :wink:

I can’t really recommend a single website that would help - my self-education started with reading books I stumbled upon, and afterwards I was just googling things I wanted to learn (eg. “how to send data over the network in c++”). It doesn’t really matter which exact resource you use - most of them provide enough to get the basics, and after that it’s just picking up specific topics one after another.

Sorry for such a long text :grimacing: Hope that helps, at least!

22 Likes

This is actually a very good reply. Mainly because I know from personal experience that many people who would like to start coding feel overwhelmed by the number of options and also by the fact that at the beginning, they understand nothing.

And because advanced coders seem to talk like aliens at that point, beginners think “wow, I will never go that far, that deep, I will never get it, I can never wrap my brain around all this.”

They sometimes don’t realize that even these advanced alien coders were once green and struggled with the basic stuff and made a million of beginner and logical mistakes. And that they learned on simple, almost silly projects.

It takes patience, passion and persistence, but pretty much everyone can master some programming language. Brain flourishes as you learn and soak it in. There is eureka moment awaiting everyone who lasts long enough. That goes for any skill.

5 Likes

@bart Sounds a lot like what happen in my learning. And you still hold the record for being able to answer the question of what is the layman’s definition of the shortest length of time. :stuck_out_tongue_closed_eyes:

@safer
In my case I started with digital circuits and creating things for the fun of it. Then I got the chance to start programming the Mainframe at the university by tagging along with my brother. I was like 13 or 14 and it was all punched cards and the real teletype 33 terminals. This was the 70s mind you. Any texts were paper, no internet or digital copies of the manuals. I progressed quickly to Assembler and the tops10 macro-assembler was a dream to use (in those days :slight_smile: ) Once microprocessers were readily available I designed my own computer and built it. I learnt a lot doing that and could only use assembler (hand assembled) as I could not afford such things as memory (1K Bytes was like 120$) since I was just a student. Only had 256 bytes till I did some holiday work.

I would recommend starting with a simple language, and that would be one that you have resources for and know someone you can ask questions of when it doesn’t work. Mind you I have found that a very good way to learn a language is to figure out where you went wrong by yourself. But early on you will need assistance since your knowledge of the language is not broad enough to find out some problems.

Definitely do the “hello world” programs following someones guide on how to do so. Then progress through some examples that expand on the language. Don’t give up, it may seem like a mountain at first, but as you progress you’ll find it becoming easier and you can start on the projects you want to do with confidence you can do them. Also don’t compare your speed of learning with others because some people are just born programmers but most it is hard work to start with.

I found it easy, but that was because I started young and learnt how CPUs worked internally before doing much programming as such and at an age when learning is easier. Effectively I grew up with processors and (assembler) programming as if it were my native language. Like @bart “c” was a natural progression from assembler and was the high level language on unix (PDP11 machines). Over the next 20 years, through engineering degree, Comp Sci, and work I learnt a lot of languages.

But for someone starting new today, there are some very excellent guides on the internet for most languages and you will learn very quickly compared to the 70s or 80s without these online guides.

@safer is there any particular language that you are interested in?

7 Likes

I’m in a similar place right now and definitely understand the soul-searching :wink: I’m currently working through freecodecamp’s curriculum and so far I’ve just gotten through the CSS and HTML sections, but you’ve got to start somewhere :smile: I’ve liked it. It’s great if you’ve got very little technical background (like me). One of my next steps is to find a “coding community” near me or start one just to meet other people who are on the same journey so we can learn from each other.

5 Likes

Good old times… My first programs was, too, punched cards stored in shoes box. I still keep a few, as bookmarks work very well.

And we must not forget that computing is, basically, a subset of mathematics. A good theoretical basis is what allows achieve great goals.

3 Likes

I too began with Borland Pascal during my HS days in the early 00s. Since the school was IT-oriented, we had separate practice and theory hours. It may not shock the old-schoolers, but younger folks get terrified when I tell them we used to handwrite the tests on a piece of paper.

I hated it at the time, but it was a good way of preventing us from getting too messy with the code. Then came C, then Delphi.

I would hesitate recommending Pascal to anyone these days, but I definitely feel it was a good starting point and I still have a soft spot for it, whereas many younger developers hate even a mention of it.

At the moment, I’m starting with Kotlin. If anyone goes with me, fine https://kotlinlang.org/docs/reference/

2 Likes

I am basically an Engineer, a tinkerer and treat a programming language as I would a hammer, lathe, 3d printer axe, tractor or a spanner. Books are my other tools, now greatly enhanced by the internet. I use the latter to allow me to use the former to turn ideas into things.

I started as a mechanical Engineer and did an apprenticeship there, paying my rent by making suggestions in a suggestion box (£20 per accepted suggestion), then college for electrical and electronic engineering. I supplemented things by driving a fruit and veg van, taxi drier and working in some local DIY shop. Then I got a graduate engineer position with thorn emi. As I had spent time after college working first in an engineering shop fixing valves then as a test technician in a computer manufacturer I got that position under a bit of tough competition. I told them I could fix their printers, but after 3 months became deeply involved in all things networking. The guys there called me data or johnny five because I had an endless list of questions for everyone.

That was computing for me and I went from there to work on some big projects, seen the error of the Internet and have tried to fix that ever since :slight_smile:

Main thing for me is to understand what you do when you program, from the keyboard scan codes, through the cpu, memory and dma channels and interrupt controllers, understand things like cmsa/cd, manchester encoding and general networking etc. before you get into all the smart chat about cryptoeconomics, crypto currency & ego driven new words (all the hodl stuff and nonsense) game theory, greek letter alphabets and the like. So deeply understand the actual hardware as a huge mass of switches, like a hydraulic or pneumatic system and work up. Then do get into proofs, some maths and really collaborate with peers, everyone is better than you at something, that realisation is huge and if you can make use of that then it’s great fun.

To me doing javascript or python etc. alone misses a lot of the fundamentals. A great way to start this is with embedded devices or physical computing as you can create your own drivers for chips that force you to look at data sheets and understand parity, endian, lift voltages etc. Then you will know computers at a basic level, but a very important one. Then you can tell people who have never seen a computer how they work and make it simple for them.

From there then the world is your oyster, instead of building large hydraulic systems to calculate stuff, you can use transistors and billions at once. You will realise a single line of computer code we take from granted is possibly switching several million switches in your physical computer, that is reduced from the size of an airplane hanger down to almost single atom thick switches in a cpu (or gpu). So maybe you don’t have the whole world in your hand or at your fingertips, you have what would have been acres of switches available to you. If you deeply understand all of this then the things you can do are close to infinite in terms of calculating stuff and creating new machines, networks and possibly life-changing (for many people) inventions and the greatest thing is you will understand it all very clearly.

21 Likes

Those are some great replies. My background is that I took some basic CS classes in school. I used Turbo Pascal and Delphi, later Python for a few things, nothing advanced. I’ve always been fascinated by computers and every now and then did some little scripts to help with something. I never went into it for University because I was scared of the math. I had some bad experience with that in school. Now I’ve got a PhD in a different scientific discipline and I’m not scared of math anymore and feel drawn back to computer science.

I think what happybeing said is quite true: “Seek out what interests you most and do that”. It’s easy to focus on career opportunities, etc. but it’s honestly impossible to know how your talents and skills will bring in money in the future. But if you’re truly interested in something and work on it, I think it’s almost inevitable that you’re going to make yourself quite useful in the job market place and bring in the money you need.

Reading through David’s response really resonated deeply with me. I’ve always been interested in fundamentals and deep understanding of computers and networking. Somehow I never took the time to learn because I either didn’t have the resources, time or confidence to look at it. Thinking about David’s post, I’m considering whether I should get into computer engineering. I’ve spent some time looking into web development and found that it’s not for me. I just hate html/css too much. I’m very bad at visual arts and it’s just too much of a pain for me to think or care about looks. Having a solid understanding of hardware and basic computing principles would be awesome. Now to figure out how to do this on the side while holding down a job that brings in money will be interesting. But this has really helped me get some insight into what I want to do. I recently started the introductory CS course by Harvard online: CS50. When I’m done with that, I think I’ll start looking into tinkering with circuits and stuff like that to see if it’s for me and figure out where to go from there.

10 Likes

The very best of luck with that. Sounds like a great method to find “your thing”, I bet you love the journey anyway.

3 Likes

Glad you’ve found some useful things from these sharings. It sounds like you needed a bit of encouragement to go your own way, and that understanding things is also important to you.

I think my wish to understand is key for me - curiosity is a fundamental human drive though I’m not sure it emerges in everyone in the same way. I’m similar to David in that, both wanting to understand things and make things using what I learn. It just happens that I mostly do that in software, but lately I’ve been going back to more practical stuff and learning how to do and make things in my home, and to maintain it. It’s the same drive to understand and affect things in a meaningful way.

So that’s what I notice about your response @safer. I see you wanting to combine this drive with earning a living which is leading you to software on the one hand and an academic route on the other, whereas you already have a PhD so you’ve proven your thinking potential. Can you make things though - have you demonstrated that? Do you enjoy that part?

For me creating something is ecstacy - more the idea than the thing, but the idea quickly becomes empty without its practical realision - so the excitement of the idea drives me to build something with it, and solve each problem on the way creates its own momentum.

David demonstrated this by tinkering. Tim Berners-Lee too began designing his own stuff for early computers and it was my route too. I had a good degree but couldn’t get the job I wanted because it was the wrong one in employers eyes (while it was perfect for me). But what got my my dream job was also having designed and built (pcb layout, etching, soldering) and programmed hardware for my home computer. No qualification can measure up to that.

So I get David’s ‘tinkering’ and seeing himself as Engineer. Me too. Is that similar in you, if not, how are you different, what is it that is demanding to come to the fore in you? Do you need another qualification or can you learn what you need in other ways? On the job, in your own way following your interests etc?

6 Likes

I used to make things back in uni but not in my current job anymore. It was hard but when you see the data of something you can’t even see with your eyes produced by a machine that in itself is based on crazy physics to confirm that your product is what you planned, thats a pretty cool feeling. I still talk to scientists but don’t do science. My discipline is one of the few declining STEM subjects where competition from Asia is killing most opportunities in the West. Wages are down and opportunities are few. Also, I didn’t like the lack of control and reliance on luck in making progress. Now I can make better money than in science but don’t have the same intellectual stimulus. It also doesn’t feel that rewarding because what I’m producing is less tangible.
I’ve always been fascinated by the idea of thoughts translating into real world things. Somehow we can plan something on paper based on abstract ideas and get real world use out of that. Computers are the ultimate manifestation of that because if you can think of it, then you can make it unlike other sciences requiring tedious trial and error with no guarantee of anything coming out of it.

I’m also quite curious about very basic stuff. Like today I was wondering how exactly did the first people manage to get keyboard and screen working in harmony with their computers to allow for programming? How do you program the first computer without first having the programs in place that enable having all the functions you need to program? How much time and effort did it take them? Could I do that by myself? How long would it take me?

I’d like to somehow transition away from what I’m doing now and I think a formal program might be the best way to get it done quickly ( a few years vs 10-15) and thoroughly. My job doesn’t offer opportunities to explore my interests in that way. Just tinkering by myself is great, but slow. I should have done that instead of video games when I was a teenager, but also didn’t really have the resources to pull it off. No regrets. I want to look forward to what I can do now.

3 Likes

effort - a lot. Did you ever wonder why the old computers had so many switches? They were to toggle in the bootstrap program which then loaded program via an easier method. The first computer I designed and made had toggle switches to load up a program in its memory. The early microprocessor system often had a boot loader/monitor in *PROM. In modern computers this is the BIOS

In the sixties special purpose computers had the programmed actually sewed into the core memory. EG the moon mission computers in the spacecraft had their program sewed by ladies who were usually sewing clothes. There is a video showing this https://youtu.be/9YA7X5we8ng?t=1332 (starting from 22:11)

6 Likes

That’s incredible! How was the sewn memory read?

1 Like

Its really a special application of the old magnetic core memory.

The cores are arranged in a X-Y grid and sewn core just didn’t have a complete XY pattern and more compact since it was not written to.

Rather than writing a lot of explanation here the wikipedia article seems to be good. Skip down to how it works section.

2 Likes

Be aware that software development is not something that everyone, or even most people can do. Computers ‘think’ much differently than humans do, and you have to mold your mind to their very limited capabilities (off and on, basically) in order to get a fundamental understanding of what is actually happening. Without this understanding, you will be limited in how far you can go. Certainly something like rust development would be forever out of reach. You have to have a desire to solve puzzles and the wherewithal to sit through it until you do. Algorithm development requires not only the understanding I described above, but also the ability to understand the problem itself from A to Z.

Its not enough to code the most common cases well, edge cases must be well defined and accounted for, and tested rigorously. Of course, most developers these days don’t write algorithms, they work on existing ones. But still, being able to understand where you’ve come from and where you’re going codewise is essential. Also, an understanding of math up to algebra is required to understand things like doubly nested loops for matrices, etc. Also, a formal logic class will be a lifesaver, as human thought is decidedly illogical at times, and quite a few logical truisms are counterintuitive to the human mind.

Don’t learn C or C++. Both of those languages are completely trash and honestly should never have been invented. They will only serve to confuse you, C with its shoot-yourself-in-the-foot-please design, and C++ with its 1-million-ways-to-kill-yourself design. About 50% of all modern security vulnerabilities arise because of C/C++, its that bad.

My recommendation is to learn Java to start for fundamentals of CS, then try your hand at some web stuff. Be aware that web programming is fundamentally different from (Object Oriented) application programming like in Java (most languages have support for OO principles these days), and requires yet another paradigm shift. After you finish basics in Java, you should also try an online MIPS architecture course. Writing a linked list implementation in Assembly is a nice trial by fire.

Do yourself a favor and don’t learn PHP. I wish I could tell you not to learn Javascript but that’s impractical, but javascript is also a terrible language. Typescript would be better, but either one will do. Javascript isn’t type safe and its a dynamic language which means its quite screwy, but for web stuff it does the job. Learn boost for CSS to make your pages look nice and give you some extended functionality, pop overs etc.