@timothy_gu
Part-time hacker, full-time learner.
Hi there! I'm Timothy. I'm currently a high-school student in Orange County, California, but I've done various work in programming over the years. I have a fairly good understanding of JavaScript, especially back-end applications à la Node.js, being the maintainer of several popular open-source packages like Pug (formerly "Jade") and Mocha. I don't do front-end stuff as much, but when I do I love working with React, Polymer, and Sass.
I know quite a few more "traditional" languages as well. I do some C and x86 assembly programming. I also know java from several classes in a local community college, and Perl from trying (and failing) to modernize a CGI web app.
Okay, I actually know a lot more than than these platforms that were mentioned. But before you fall asleep reading, I am also involved in several entrepreneurship efforts. I am the Director of Technology at the PIxEL Foundation as well as the PIxEL club at my school, which promotes entrepreneurship and computer science to high-schoolers around us. With a couple of my friends, our app Localpulse finished in the top 5 in the Microsoft Imagine Cup, in the United States in 2016. We were the only high-school team to accomplish this feat.
I am entering my senior year of high school, and with it comes college application. I am actively working towards attending institutions where my interests and passion in computer science can be further developed.
Nothing here yet.
No blogs yet.
No blogs yet.
@nickwiersma, I do agree with your thinking, that it can be helpful to know what is going on behind the scenes (in fact, the first language I learned was C, and I can feel the benefit of doing so). However, you don't need to know C to find the time complexity of a function, for example. That goes back to my distinction between CS and more applied studies like electronic engineering, as low-level programming is a very important part of EE, but less so for pure CS studies. And oh, I sure hope you are not using malloc() for a simple hello world program in asm :)
Computer science is different from computer programming. If the sole reason you are attending college is to find a job as a system programmer, then yes, C is a must. But, if you are learning computer science , then C is an incredibly bad choice. See, computers and humans are alike. You can be a great mathematician, and understand calculus, but be illiterate. It can be difficult to learn calculus, when, without a notation, it is hard to communicate between two people. But Newton and Leibniz never had a calculus notation before them, and they still invented calculus. To become an accountant OTOH, you need to understand "+" means addition, and "-" means subtraction. To be good at computer science, you merely need to know how computer works, and algorithms for problem solving. You don't even need to learn one programming language (in fact, many university CS classes in the US are language-agnostic), although knowing a programming language that's easy to learn helps communication. But to become a programmer , you need to know a language that you are going to use daily on your job, which might be C. There's no point to using a language that's hard to learn, when its only purpose is communication. Now, as to what languages are easy to learn, personally I think Python is a good language. It doesn't have too many low-level things like pointers, and it maps fairly well to mathematical notation. Following the same thought, MATLAB/GNU Octave is another useful language for computer science.
My first open-source contribution was to FFmpeg , a toolkit for video and audio processing. I was trying to rip a DVD for my parents so that they could play it on their iPhone, and I was amazed by the lack of official documentation on such a simple task like re-encoding, and typos and mistakes that made reading docs even harder than it was. I thought it was within my ability to at least fix some of the obvious typos, and so I set out to do so. With my fresh Ubuntu environment, I proceeded by cloning the tree and reading the page-long contribution guidelines . Even worse, English is not my first language, and a few years ago my English wasn't quite as good as it is right now. Reading this piece of document took me hours. Alas, FFmpeg is one of those old-school C projects where everything is done through git format-patch , git send-email , and a Mailman mailing list (if you've never heard of these things, good). No GitHub or "pull requests" for me. It took me a long while to set everything up (from committer name to branches to email servers) and finally send out that patch to the mailing list. I had no previous experiences with Git, and I was so proud of achieving the feat of simply sending out the email. That commit was speedily applied by one of the FFmpeg developers, and there you have it, my first ever OSS contribution. No, it wasn't a smooth experience. I didn't have the help of documentations in my native language, nor modern utilities such as GitHub pull request. But I did do something for other people, and the ability to do that was really empowering for me.