I am disappointed to see how some comments jump straight to "we shouldn't single out individuals", "his parent helped" or "yes he did X but Y is on another level altogether".
This really feels like some here should work on themselves to see why they feel so personally threatened by the achievements of a 13 years old. Even with the help of his parents (which we have no indication of) this is a good inspiration for other younger of our community that feels some knowledge is out of their reach.
I know that some of the people who were singled out to their classes as the smart kid (and thereby encouraged to keep learning, because they felt they were doing well at it)... suspect as adults that other kids were discouraged by it (like the other kids felt they didn't have the special aptitude).
A different message than "obviously, this is a Smart Kid" would be "this achievement is within reach of kids who put the effort into it, and we should be supporting all kids to reach like this".
The piece had some bits in it were hitting the first message, rather than the second.
At his age — or maybe a little older, 14, 15, I’d have to check my version control history — I was developing a multi-user networked chat client using kevent/kqueue :) I remember being so inspired by the C10K problem. I miss the times when everything was new and exciting, tbh.
I will say I’m really happy I kept all my old projects. Looking back I actually wrote really good software, expect for my long since shed distaste for testing.
Definitely, I started coding at the age of 10, it doesn't matter how much help he has gotten, rather that he is interested and has discovered what might be his future path.
Similar stories can be found in other fields where kids as young as 13 (that I know of) go through serious and tough adult-level certificates in IT Security (with parents permission) or develop the one remarkable piece of software after the other.
I’m equally happy for all of them that they live in a day and age where it is possible for them to explore their hobbies to these great lengths.
The internet makes a huge difference. I first got the internet at home when I was 12. Was then able to learn to program. Before that, I really wanted to learn everything I could about computers, but the local library didn't have the books I needed, I didn't have any adults or friends who could teach me, and I also didn't have the software I needed (I didn't even know what a compiler was). The internet gives anyone who wants to learn about programming and electronics access to references, tutorials, YouTube videos and even knowledgeable people they can ask questions to.
This is why IDEs with built-in documentation were so valuable and such a big help. I largely learned to program using such resources, with QBasic, QuickBasic (much more help), Turbo Pascal, Visual Basic, Delphi, etc. Mostly before or without internet. I learned data structures and algorithms from classes in parallel with this (along with some other languages), but actual practical programming knowledge came mainly from built-in IDE documentation. Before QBasic, I had GW-Basic, with no built-in help, and learning was very slow.
I learnt to program at age 12 with no Internet. We had magazines, we had manuals, we had libraries. It used to be that a "home computer" came with a programming language (usually BASIC) and some introductory material out of the box so a whole generation of programmers learnt that way. But I guess there was some gap where this wasn't a given any more... In some ways today is worse than the "old days" because you don't need to program these things to do stuff with them.
> But I guess there was some gap where this wasn't a given any more...
Very much so. First computer has MS-DOS 5. Which boots and gives a blinking cursor to 'do something' with. This often entailed editing mem.sys and various .bat files to get a game working. Or the abstraction that was Word Perfect that was not WYSIWYG that content and layout are separate concepts, and yes, magazines usually had 10-50 pages of BASIC stuff to do 'cool stuff' with.
From my observation, the change happened with Windows. Not was was a GUI, things apart from batsock mainly 'just worked' (except when they didn't) and it was no longer necessary to be required to peer into the (albeit high level) bones of a computer.
And this was true before DOS, C64, Spectrum also offered somewhat hands-on experiences.
But... perhaps not so obviously in Windows-land, if I were giving a kid a computer I'd make sure it was Linux as the command line's not far away, and encourage use of it to get an implicit understanding of what's happening - again a somewhat higher level understanding than creating a RISC-V chip, but more-so than 'right click on the desktop to change wallpaper' - use mkdir to create a directory, understand repositories and how everything's a human-readable text file. Basic stuff with GNU tools, then a little scripting, perhaps some Python.
I was also 12 and found a magazine (ala SciAm) which had a small program snippet to compute a number in it. My buddy knew enough to tell me that it was Basic and my computer came with QBasic.
I didn't have anyone else to ask, didn't know about any computer clubs (and didn't think to ask). So I got very familiar with the built-in help. Spent hours looking through the help until I found the one I needed.
Didn't help that I started learning English only a year before, so had no idea what most of the help said anyway. I vividly recall spending a week figuring out how to loop indefinitely. Finally I got to "while". Was so pleased when it worked.
A bit later my buddy got a modem, and with that BBS access, so he downloaded snippets for me and programming articles, and things accelerated.
On the bright side, finding and reading documentation is now one of my strong points. Hanging on IRC I could usually help others within minutes with libraries I'd never even heard of, simply by diving into the documentation for a bit.
I went to my local home computer club when I was around 12 to soak up information beginning of the 80s; there were all these guys (only guys) there much older than me who knew everything and liked helping a kid who, by then, knew how to program basic, asm + pascal. They taught me eprom programming so I could swap out the basic rom, programming BBS software (I wrote a few BBS systems for myself after that; I had hosted a BBS since age 10 and it was always cool to have different features etc than the rest) and making cartridges for all kinds of purpose.
Before that I got most from magazines & books; my grandparents took me to fire sales (lot of magazines there) and 'rubbish sellers' (not sure of the english word), for instance, Phillips had a quarterly 'dump' sale under the football stadium; all kinds of electronics, books etc could be had there for next to nothing (money earned with strawberry picking in the summer went to those places). I bought scopes, ham radios etc and documentation there. And my father got me books that were damaged from work (mostly C, Pascal, later Clipper and other things).
I got my first certification at the age of 15. It is truly amazing what young people can achieve nowadays, as long as they are surrounded with the right people and technologies. I read something some time ago, where a 13-year-old built a fusion reactor in his home.
I recall discussing that Farnsworth–Hirsch fusor build with a particle physicist friend and from looking at the (very unshielded) apparatus we felt that it was extremely dangerous to operate for a lot of reasons (chiefly, but not nearly only, the neutron flux). Impressive work but really unwise.
Same. When I was 18, I already started to experience deteriorated focus and cognition compared to my 13-year-old self. I remember being able recite the names of commands, software projects and libraries with perfect clarity at 13, with a strong ability to connect the dots (for example, if I read a technical concept in one book, I could probably recognize it when I had encountered it a month later). When I was 18 it became worse.
I first discovered it after realizing I was serious confused by two programs with similar names in the middle of an IRC conversation in a FOSS-related channel. The mistake was so embarrassing according to my own standard, I knew both programs and I couldn't even believe I could confuse them, yet in the conversation I was totally blind to the mistake until someone started to question it. It was when I realized and accepted the inevitable. Interestingly, I don't remember feeling sad - I knew the same IRC channel had members who were younger than myself, yet they were able to discuss technical questions with me at the same level, if I was replaced by them, nothing of value in the FOSS community will be lost.
> I’ve since learned that Nicholas has been awarded in spelling bees and math competitions and is an expert at solving the Rubik’s Cube. Somehow, I’m not surprised.
That's encouragement of one kid, to keep working and learning. But I think that publicly singling out one kid like that can be discouragement of kids around that one kid, if it's implied to them that they have less aptitude.
I don't want to poop on Sharkey's achievement, because I at 17 am nowhere near the level of expertise they demonstrated, but it should be noted that they've had the means to be successful in this endeavor, whereas most young students even today do not (21 million Americans don't have broadband Internet, fewer have good teachers, even fewer have good computer teachers, etc). Imagine the untapped potential lurking in kids too poor to really take the time to learn about this kind of thing.
+1. There are definitely serious opportunity gaps. My personal experience was that economic condition of your family is important, but even that was insufficient. Unfortunately, a lot of things depends on how lucky you are. When I was a child, I was lucky enough to live in an urban family, had broadband Internet access and was able to afford any computer hardware I wanted, but I was not lucky enough to have a teacher.
When I was 13 years old, I learned some basic system administration and programming on the web. My knowledge allowed me to compile the Linux kernel with Con Kolivas's BFS patch applied, and I also found and fixed a bug in GNU coreutils. On the other hand, I was trying and failing to understand many basic concepts. At this time, I already wasted years of my life on bad programming books unsuitable for beginners before picking up some good ones, otherwise I should have learned basic programming at an earlier age. I was also trying to derive the Y combinator using the rules of α-conversion and β-reduction, but I never got the correct result. I was blowing up diodes with microcontrollers by failing to understand what a nonlinear IV curve is, and totally confused by the concept of frequency domain. I was only able to grasp these basic concepts in the next three to five years. By "understanding", I only mean to know "what they are", "what do they do", not "how to do calculation and math", so it was mostly just a matter of knowing some definitions, and there was nothing really to prevent me from understanding them when I was 13, but I still couldn't grasp them until years later.
What was the problem? No one in my entire family had an engineering background and no teacher in my school was able me anything about technology, computing or otherwise. My only guidance was the web, chiefly Google, Wikipedia, and bookstores. While they were successful at teaching me system administration or using free and open source software, but not very efficient at many other things - an easy concept which may take only 30 minutes of explanation can be intractable when you don't know where to look and what to read.
In hindsight, if there was anyone who was able to teach me things relevant to my interests, my life would take the same path, but at a much faster path and today I would probably working on something more interesting in computing. Alternatively, without broadband Internet access, I won't be here to post this comment today.
If there's one thing poor kids have, it's free time. I think it's actually relatively easy for a smart poor kid in the US to learn ~whatever they want; that was certainly my experience, and I think the structures that were available to me are available to basically any American kid today.
One thing to keep in mind is that poverty is strongly anticorrelated with intelligence - this is not PC, but the evidence is overwhelmingly clear - so it's easy to see that there aren't many poor kids doing stuff like this and (mistakenly) conclude that it's because they don't have the extrinsic opportunity, rather than that they lack the intrinsic means.
There are simple things you are taking for granted which many "poor kids" do not actually have.
- A quiet space that the child can use to learn
- The foundation of self-efficacy and value of learning one receives from educated role-models
- Access to the internet and the materials to engage with the coursework
You'd be lucky to find a "poor kid" who has 30 minutes of safe time, fed and quiet.
Unless you are meaning "lower middle class" as poor kid - i.e simple household with no extreme resources. In that case I do agree with you that you can do a lot with a little if you are that lucky.
When your parents scold you for leaving a light on you can be certain that getting internet and spending hours dong something no one understands is a far away from you. Much worse now with the library and bookstore either being greatly gentrified or closed for good.
Parents supporting a child hobby because they understand its potential value cant be overstated. Being poor just doesnt give any latent interest a chance to develop. That's the key. NGOs try to bridge this gap but without the kids parents/siblings/community understanding the value of these things, its an upward slippery slope with far more risk.
Quite impressive, I once though "building SoCs is no more hard than Lego these days," building an actual core from scratch with HDL is a wholly different level of involvement.
Yes, it's LEGO for anyone with domain knowledge bias.
I would go one further: building a functional, prototype core vs. a marketable core are entirely different beasts given the litany of testing and customer considerations. It's difficult to say what exactly this kid did since the article is light on detail; it could be an achievement.
It's quite trivial to build a simple processor in HDL (.v or .vhdl) because the compiler synthesizes the actual digital logic for you. It's not much different than C or a functional language like Haskell or OCaml, but with considerations of timing and don't cares/high impedance.
PS: s/no more hard/no more difficult/ because "more hard" is always improper when "harder" exists.
As an individual I am impressed and happy for him. But I’d prefer that society doesn’t celebrate stories like this with public accolades. I think it encourages a “maximum accomplishments in minimum time” way of living which is antithetical to my own beliefs about how to live a good life.
It's a challenge but it's not out of the question, even for 13 years old.
Designing a basic CPU with modern tools is not difficult if you understand how to do it, know the tools, and have a useful simulator. It's the hardware equivalent of a writing a bytecode interpreter in software.
(Tools are usually VHDL or Verilog, and Chisel is gaining traction in RISC-V academic circles. There are many other hardware languages too, but not as well known)
An experienced digital designer might rustle up a simple custom CPU in an afternoon or two. Not necessarily a great one, but good enough for some problems. They might do it as a side task during an existing logic design just because it takes a less area than the equivalent logic gates for some function that doesn't need to run at full speed. This is quite a common trick on FPGAs :-)
I've done this for a network packet processor. The assembler took longer to write than the CPU, and even that was a dirty Perl script. The whole thing took maybe 2 workdays. In that instance the motivation was to avoid having to do FPGA circuit synthesis when changing the network processing program: Assembling and loading a different program into the custom CPU took seconds, much faster than the several hours for FPGA circuit synthesis.
As a computer architecture learning process, I suggest building a microprogrammed, single-cycle processor using digital building blocks without an HDL and without library blocks. Then, refactor it to be pipelined (which demands branch stall logic). Next, add branch prediction. Then, refactor in an HDL. Finally, superscalar, VLIW, and/or unified scheduler.
Choosing MICMAC or MMIX would be good macrolanguage target to start with. Remember, the microprogramming ops can be much simpler and VLIW-style.
The microprogram will be a ROM block that runs the decoding and execution of the actual processor's ISA. It's helpful to write a microprogram assembly language and compiler to make maintenance easier.
Hey, that sounds.... just like a typical computer architecture course. ;-)
disclosure: I love computer architecture courses, and I highly recommend them.
edit: I also think you can skip the microprogramming, but I think I understand what you are getting at, which is that you do a multi-cycle implementation first and then a pipelined implementation.
Seems to me starting with microprogramming adds complexity that doesn't necessarily make sense for a risc instruction set? Heck, this guy does a Verilog Z-80 without microprogramming. https://dl.acm.org/doi/book/10.5555/3199987
While true the microprogramming ops are much simpler, the inherent parallelism means writing that stuff and getting it correct is usually challenging.
I think the "microprogramming" bit can/should simply be a multi-cycle, non-pipelined implementation.
Non-pipelined is easier to write and debug, especially if you are used to regular sequential programming; once you have that working then it isn't too hard to turn it into a pipelined implementation.
A basic RISC style design is probably easier than a Z-80 because of the simpler addressing modes and the simpler decode.
You're welcome. I have one of those (a bit older though), and every now and then I play around with it for a bit to keep my skills alive, it's super impressive what you can do with hardware this flexible. Get something with as much IO as you can find/afford.
Not all the time, and I personally don't consider it nice that you would assume that. There are indications in the story that the organizers know something about the full story, and I doubt they would actively perpetuate a fraud.
For reference, I started programming when I was 6, did a little hardware design (easy stuff, interfacing DACs and RAM chips to 8 bit CPUs), wrote an assembler at 9, got a patent when I was 12, etc. My dad did a lot to inspire me and provide me with resources, and had some knowledge of electrical stuff (he had been an electrician in the Navy in WW2), but all the programming I did was very much mine. So it's not hard at all for me to believe that this young man completed a training course intended to get people up to speed on this technology.
If you were a teenager in the 70's it would be unusual if your parents would have granted you access to a computer. You most likely would have had to learn in college. One of my colleagues who had learned programming in college was in a shouting match with a somewhat younger programmer, and said to the younger programmer, "I've been programming since you were in diapers." The younger one replied, "So have I."
It's not essential to make equipment available to people before college. The most important thing is to make sure that everyone can get into the field who can prove themselves.
This really feels like some here should work on themselves to see why they feel so personally threatened by the achievements of a 13 years old. Even with the help of his parents (which we have no indication of) this is a good inspiration for other younger of our community that feels some knowledge is out of their reach.