13

I am 32 years old now and I want to apply for a degree in computer sciences at a European university. I am afraid they could consider me to be too old. That's why I want to show them somehow part of my code and improve that way my chances to be admitted at my age.

I thought about uploading a video in Youtube showing how my program runs and publishing the code of the program in other place, and then putting the links inside my CV. I am not sure how to do all this. My code is an unfinished emulator. It is about 20 000 lines of pure ASM and it hard to read. I feel that I need a way to prove that the video shows a real existing program and not only fake animation I may have done.

  • First, I wish to know if it is good to put the links to my code and videos inside the CV.
  • Second, I would like to know the best site (and simplest to use) to publish my code. It would be not lucrative at all for somebody to steal my code. Still I think it would be painful to find out some day that someone copied and pasted chunks of my code and said that he made it. I need a basic protection against plagiarism provided by the site. Maybe based on the date I posted the code.
  • Third, I am very worried about critics. This is 20 000 of ASM code(only part of the nearly 50 000 lines long project). It is messy! It looks really ugly. It is cool and highly optimized but I know there is always place for more optimization. I love it, it uses lot of SMC and code reusing. I love it but always there are people who could say it is junk.
  • Fourth, it is not finished. It works perfectly, but part of the OP-codes are not coded yet. I coded more of them, the ones I think would be used more frequently.

Given a situation like this, what would be the best way to proceed with sharing code to help boost chance of admission?

  • 3
    I did upvote this. This site dislikes advising on specific situations, especially college or grad school admissions, but this particular question does happen to be general and useful. – user18072 Nov 11 '15 at 18:15
  • 3
    Hi, and welcome to Academia.SE! I've done a bit of editing on your question to generalize a bit (including to cover graduate admissions) as well as to sharpen the question, with the aim of making the question better suited for the model of this site. Please feel free to adjust anything that you feel I have broken in doing so. – jakebeal Nov 11 '15 at 18:40
  • 3
    "I want to apply for a degree in computer sciences at one European university. And I am afraid they could consider me to be too old for the study." - well, have you picked a particular programme, and is admission into that programme restricted at all? – O. R. Mapper Nov 11 '15 at 21:05
  • 1
    "show them somehow part of my code and improve that way my chances to be admitted at my age" - this reminds me the CS professors at the university where I studied seemed to be split at roughly 50/50 as to whether having coding skills before starting CS studies is an advantage (prior skills, faster learning) or a disadvantage (lots of self-taught bad practices, likely reluctance to learn why something works best a specific way when it has always been working somehow without understanding the background) for students. – O. R. Mapper Nov 11 '15 at 21:16
  • 4
    The worker from the agency that is moving my solicitude - this is completely new to me. Do you really need this middleman? Can't you apply directly? – aparente001 Nov 12 '15 at 2:05
5

It sounds like you have a portfolio that should be a part of your application to university or a job or anything. Furthermore you're saying that the working product is a better testament to your skill than the code itself. This is also fine.

The only concern I see is how much work you will require on the reader of your application. If you link to a YouTube video, also include screenshots. If you link to a GitHub profile, consider writing up some basic statistics on the activity or health of your activity there.

Regarding where to publish code, don't overthink this. Github is popular, but a Dropbox file, a Google Doc, a file sharing service, or anywhere else you can post a file will do.

I do not know the proper channel to submit a portfolio or the proper format. This situation is probably documented in the application instructions however, so you should be able to find info there, or reach out to a recruitment officer for how to proceed.

EDIT regarding where to post - actually a .zip file or similar may be problematic since they tend to look like viruses to people, who don't want to open them. Github or a competitor may be the best choice since the source code is browsable in their web UI. It is best practice to include a software license whenever you publish (literally "make public") code, even if you think it is unusable. I think the MIT and Apache licenses both amount to (IANAL) "do whatever you want with it, just don't sue me."

  • Are you somehow suggesting I could be sued by posting my own code online? – NIki Nov 11 '15 at 21:33
  • 1
    @NIki Usually, when you publish your code online, you attach a license to it. This license explains what people can do with your code (can they use it? can they include it in their own code? can they make money out of it?), but also it protects you! For instance, if you make a program that calculates the diameter of a cable for house wiring, someone uses it and the house burns down due to electrical problems because there was a bug in your code. A good license would protect you from being sued. – electrique Nov 11 '15 at 22:17
  • @electrique I understand it now! The first thing I thought about was the possibility of a false positive in plagiary. As example someone that never heard about Spider-man, writes a novel narrating the story of a superhero bitten by a spider and publishes it. I guess some similar could happen in programing too. That was what I thought about first. I understand it now. Thanks! – NIki Nov 11 '15 at 22:43
  • To be clear, a license won't protect you from allegations of plagiary, but yes I believe electrique describes the most common risk of not licensing code. – user18072 Nov 11 '15 at 22:44
  • 1
    @JeffE what do I need a citation for? that you can share stuff over Dropbox? You kind of need a citation for why posting code publicly is professional and exudes confidence. It might be professional with respect to norms in the open source community, which is not the community the OP is addressing. – user18072 Nov 14 '15 at 22:13
5

A second answer to get at the quality of your portfolio.

This revolves around a blunt point that I think is critical to understand if you want a successful application:

Your code is NOT good. (But that's okay.)

Nobody writes 20000 lines of assembly anymore. For any nontrivial program, you cannot write better assembly code, in efficiency or size, than the person next to you writing C. You can talk about the merits of the code and the efficiency gains you have made that would not be possible in C, but still, a C programmer will be able to write faster, better code, faster, hands down.

If you get into an argument trying to defend the absolute quality of your assembly code, you will quickly find yourself defending, basically, that you're really crappy at writing C hence your ASM is much better. Hopefully you have the humility to understand that C is a good [given we're talking about low-level speed] language you haven't mastered, not a language you have been able to surpass by eschewing. If you don't have this humility, then school is not the place for you in the first place. I personally would be able to detect this difference as an interviewer at a company or for admissions.

But you have a good story.

This is what your portfolio demonstrates:

  • You really, really, insanely enjoy this stuff.
  • You are very willing to make improvements and hacks all by yourself with minimal guidance.
  • You persevere to build something big that works.
  • Given that high level languages are basically easier to code in than low level languages ("in some sense"), you've proven you'll succeed at learning them.
  • You know why you enjoy it and what you did to make it work.

This is solid application material which is why I'm so enthusiastic about including it in your application in the first place.

But I think it's really important to understand that this story does not involve touting the benefits of ASM over C. If you go this route, you will quickly make out-of-touch, egregious technical errors in your application, and steer away from what is actually a highly compelling story.

  • Thank you for trying to help me! Please give me a chance! I need to finish to code 4 functions more before I can publish it. This will give it very basic functionality. I just reached a moment that I can't defend myself without exposing parts of the project that I consider I should not expose right now. Those 4 functions could take from 2 days to one week. I can't wait to publish this and have a tech speech with some professional like you! I would be thankful to you if you are disposed to wait. – NIki Nov 15 '15 at 0:20
3

First of all, you actually wrote 20000 lines of code in assembly? People don't write large programs in assembly anymore because it is very rare for a human to do better optimization of a very large program than a compiler. They write assembly in special cases to optimize a small subroutine or to micromanage the execution.

That said, I would propose for you to write a small paper (2-3 pages, or more) explaining what is the purpose of your program, why you chose assembly to do it (maybe to learn how the low level stuff work?), put some snapshots of it working, and how you solved some issues. You can put it up in a repository (maybe researchgate?) and add a reference and link to your CV. If I was recruiting you and saw a paper about a program in assembly, I would check it out for sure. However, I would never go to read an assembly program... This solves your issue of not getting the code stolen.

Moreover, if you came to my interview, I would ask you: "Why assembly and not C? Is it a performance issue? Is it a hobby? To learn?". If you add it to your CV, be prepared to defend it.

Second, 32 is not too old to get into university, There were people much older than you during my studies. I'm not sure in which country you want to study, but how competitive is the procedure to enter the university? In some EU countries, anyone can access university and then they have a strict exams scheme for going to upper years. Check your alternatives.

Finally, try to catch up a little bit with current technology. I know you want to go to uni to learn, however, kids now learn Python at high school, and are usually quite skilled when they come to uni. Not knowing about Github or where you can put your code, while having written 20k lines of code yourself, tells me that you are not good at searching things up. Try googling "platforms to publish my source code".

I don't want to discourage you and I apologise if I was harsh. If going to the university is your dream, go for it. But you can start already learning to become a good programmer, there are so many information out there for free, that ignorance is no longer acceptable.

  • 1
    +1 to "catching up." Maybe learn to write 100 lines of Python and Java, for no other reason than you will actually look stupid if you haven't heard of these languages and can write code in none of the major ones. – user18072 Nov 11 '15 at 22:46
  • 1
    I coded stuff in AS3, VBS, HTML etc, When I start to code something in higher level language, I fell like calling a routine or using a class is just the same as calling/reusing code in ASM, so I often prefer to do it in ASM. I don't know why. I would like to get better in higher level languages. – NIki Nov 11 '15 at 22:53
  • 1
    @NIki I never said you cannot code in anything else. However, I'm really curious, why assembly? – electrique Nov 11 '15 at 22:57
  • 2
    @NIki just speaking as a software professional here... focus on your enjoyment in optimizing it yourself, even if it's slower or more bloated than typical C code because it's fascinating and fun and technical and cool. I'm serious. You're treading into dangerous territory when you claim the assembly you wrote is "faster" than what someone like me could write in C with a C compiler. Compilers are good, and your argument that your assembly is faster in absolute terms will turn into an argument that you're not a very good C coder. – user18072 Nov 14 '15 at 22:17
  • 1
    @NIki I know that [technically imprecision notwithstanding]. And when you pass a paintbrush to Picasso he's going to do something better with it than I can on my own. Except here, replace "Picasso" with "thousands of people with Ph.Ds. writing compilers for a living to do this better." – user18072 Nov 14 '15 at 23:00
2

I have written instruction-by-instruction emulators in C and C++ when working on performance analysis of computer systems under development. Based on that experience, these are some questions and issues you should consider if you decide to use your code as part of your application. They don't need to be answered here, but you should be prepared for these issues to come up.

You made two choices that may be difficult to defend, assembly language and self modifying code.

Assembly language There are two possible justifications, your own education and speed. Personally, I would never claim a speed improvement without having benchmarked both versions. As I understand the situation, you do not have a high level language version, so you cannot do that comparison.

When I started programming, it was easy to beat compilers by writing assembly language directly. During the 1980's and 1990's it got harder and harder, as compiler optimization improved. Some of the optimizations modern compilers routinely use make for difficult bookkeeping if you try to hand code them. The last few times I used assembly language were situations in which I needed very tight control over what a processor was doing for hardware performance measurement.

That said, if you have a particularly clear, well-written piece of assembly language code it may be worth presenting as evidence of your programming skills.

Self-modifying code The only justification you mention is to save space. In writing emulators in C or C++ I never hit memory size problems, not even in the 1980's, when memories were much smaller than they are today. 20,000 lines of assembly language are unlikely to result in more than about 100 KB of instructions. Why do you need to save instruction space?

In addition to the obvious readability downside, self-modifying code may run slower than having separate copies for each function. Many processors have an instruction cache that is optimized for feeding instructions into the pipeline, not for handling changes. Frequently used code that does not get modified can sit in the instruction cache. Code that does get modified has to get reloaded after each change.

Have you measured your code performance with and without self-modifying code?

  • The processor behavior upon SMC vary from one CPU to other. In any case self-modified code will be slower than the not self-modified one. That's why I limit the use of SMC in the parts of the program where performance is not important. Usage of RAM space is critical for the project. I have not C version. I understand that the humans need HLL. C vs ASM is like DNS vs IP. And at a latter stage a HLL could be used for the project. Anyway this will never happen, because I've planned to abandon the project once published it. It is too ambitious and I can't finish it alone. And it can't be sold! – NIki Nov 15 '15 at 0:00
  • @NIki How would you explain being short of RAM for instructions with such a tiny program? – Patricia Shanahan Nov 15 '15 at 4:12
  • I can't do it using only what I have coded to the moment. The concept of the program explained in the presentation will demonstrate the need of as short machine code as possible. While not always mandatory, a shorter program would always be better than a larger one. Shorter programs leaves more resources for other programs to use. I don't see the need to defend this statement. Maybe you all are just testing me to see if I can defend myself in a possible interview with the admissions committee. Shorter programs are better and I don't have to demonstrate it. – NIki Nov 15 '15 at 12:21
  • Will admissions committee attack me so badly over my decision to use ASM. I mean it is just a language. Will they be all the time re-iterating over and over again over the choice of ASM over C? I am starting to feel the bad guy of the story and I think I just chose one language over other! I didn't break the law or something! I am feeling attacked and I am worried that they would not even read my presentation and directly jump over their desks and attack me with sticks because of ASM. That's how I feel right now. – NIki Nov 15 '15 at 12:35
  • 1
    @NIki I am trying to show you some of the questions that are likely to occur to someone reading about your program. That way, you will be able to preempt any risk of attack or choosing to ignore the program by providing the answers in the program documentation. – Patricia Shanahan Nov 15 '15 at 12:55
1

Don't share the code as part of your application.

Do describe what the code does, and the approach you took, and what you would like to do differently if you had it to do over again, and how all of that ties into what you want to do in grad school.

If it doesn't tie in, then there's no need to bring it up at all.

Programmers who are able to document their code are 100 times more valuable than those who can't. If you write a clear, interesting description, as I outlined above, that will impress the committee far more than reading the code or watching a demo.

If you want to skip the middleman and prepare your own application, you are welcome to ask specific questions about the process here as you go along.

I do understand that the process seems daunting, but Academia can help you and also a language stackexchange site, such as https://french.stackexchange.com/.

One last thing. Your age (32) is not a big deal.

  • 2
    +1 on documentation vs. 20000 lines of assembly language code. Also, when I started on the graduate program that led to my PhD in computer science, I had 32 years of professional programming and computer architecture experience. Age should not be a big deal. – Patricia Shanahan Nov 14 '15 at 4:19
  • Thank you, aparente! The project does not tie. The university will not touch ASM at all, only highest level languages. And, I myself don't want to use ASM anymore. It gives me all kind of pains. It is very hard to code and debug. I only pretend to show them my level of understanding of CS. Admitted or not, I plan to throw away all the ASM projects. I'm definitively not going to interrupt the teacher, saying "this would be hundreds of times faster done in ASM". NO! I'll most probably not use this acronym at all in the university. I'll do as you suggest! – NIki Nov 14 '15 at 14:52
  • Downvoted. Providing thorough, readable documentation isn't an alternative to sharing code; it's a requirement for sharing code. Of course you should share your code, and of course your code should be well-documented. – JeffE Nov 14 '15 at 21:51
  • @JeffE Is it a problem that it is unfinished? The idea and function are clear, but some less needed functions are not coded yet. I have comments inside the code too. Comments like ";TODO: try to use another register here, because ...". Sometimes I just comment an instruction like: ";xor ECX, ECX" because it is no more needed but It helps me to keep it there commented in order for me to know there ECX has to be zero, but it was zeroed already by the previously executed code. It is a WIP and it could look messy, but the presentation and explanations will be the clearer possible. – NIki Nov 14 '15 at 23:02
  • 1
    @Jeff - If you think that it is helpful to publish a piece of code solely for the sake of bolstering an application to grad school in computer science, I suggest you develop your point of view in an Answer. – aparente001 Nov 15 '15 at 2:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.