2
$\begingroup$

I am an undergrad in CSE and have completed more or less the theoretical side of CSE on my own, reading books and YT tutorials.

I want to build some projects that will give some experience to improve my job prospects.

However, I am facing some problems trying to do so. For example, I have made an account on GitHub and surfed some projects and tried to build them but there were many blocks of code in HTML, CSS, and more.

I am unable to figure out what to do with this code? To learn something, should I blindly code it in the shell and run the program to try to understand my code or take any other approach?

Please provide some light on this aspect as I am a complete beginner with this practical work. I am looking for a tutorial that can handhold me and show how to do two or three projects on my own, letting me code on my device. What sources should I look for to get such help and guide?

I am a Computer Science and Engineering undergraduate with a good knowledge of C++ and taken courses such as Computer Architecture, Data Structures and Algorithms, Compiler Design, Theory Of Computation.

$\endgroup$
3
  • 1
    $\begingroup$ You can build experience by working on other people's projects. If you're lucky, you can even get paid to do it. You don't have to learn everything all on your own. (Don't ask me how I know!) $\endgroup$ Commented Oct 29 at 13:44
  • $\begingroup$ I'm guessing you've written and executed some programs before, right? Have you created a multi-file program before? It'd help if you pointed out the specific projects you're asking about, but I'm guessing they're standard multi-file web projects. If so, they're probably just larger applications than you're used to, maybe with some extra build tools and dependencies thrown in. I suggest building up to larger projects step by step--start with a single file project and add to it. It's somewhat hard to answer this without more context for your current programming knowledge. $\endgroup$
    – ggorlen
    Commented Dec 7 at 7:14
  • $\begingroup$ CS theory is basically useless when it comes to making web projects, by the way, apples and oranges. That said, when you do CS theory, generally there is some written or worked component. Have you done these exercises (examples: converting DFAs to NFAs, removing left recursion from grammars, etc), or just passively watched videos and read books? $\endgroup$
    – ggorlen
    Commented Dec 7 at 7:15

2 Answers 2

1
$\begingroup$

As with many skills, the way to learn how to build projects is to build projects, preferably in a series of increasingly harder problems.

But, one should also strive to build projects specified by others, not oneself, initially. And then to get feedback on the solution by others, preferably, but not necessarily, by the specifier. In any case, feedback needs to come from someone skilled in matching specs to solutions.

Finding things at GitHub probably isn't the way to do this, as you may not find a complete spec and you probably can't get feedback.

Specifying your own projects can lead to self-delusion on the adequacy of your solutions.

I suggest that you ask a professor for a project. The best project would be one that they were interested in for some reason. But they might point you to some book, or some previously given course project. You will want to ask them for feedback eventually, and perhaps constantly, so it ideally should be someone willing to work with you periodically.

Along with the project code you will need test cases to verify correctness. My personal view is that these should include both "unit tests" and system tests, where unit tests are fine-grained verification that code meets individual specifications and system tests guarantee (for some definition of guarantee) that the program performs correctly (and sufficiently efficiently) overall.

Some universities have a special "capstone" course that is project based.

I'll also note that many (most?) good projects are team based. That might be harder to arrange.

$\endgroup$
1
  • $\begingroup$ Thank you @Buffy for the answer. However still can you recommend some project for an undergrad who has good knowledge of c++ and the subjects done in undergrad cse course like computer architecture, dsa, compiler deign , TOC etc.. $\endgroup$
    – Sillyasker
    Commented Oct 20 at 13:42
1
$\begingroup$

For a project I would strongly recommend a subject matter that you are curious or passionate about, as strong motivation increases the likelihood of completing the project.

Also consider your interests outside of CSE. If you like building physical things with an embedded software component, you might decide to acquire an Arduino or Raspberry Pi to create and operate your own vacuum robot, LIDAR, pulse oximeter, or license plate reader. If you are more inclined or restricted to things that can be done with just a laptop computer, you could explore pseudo-random number generators, hash functions, sorting networks, or factorization. These are just a few ideas off the top of my head.

In high school I wondered what happened under the hood when I pressed the $\exp$ key on my calculator, and could I implement that myself on an Apple II? After seeing someone recite one thousand digits of $\pi$ on television, I wondered how one would go about computing those 1000 digits of $\pi$. These were my first two software projects. Research was difficult as there was no internet yet, and I was mostly limited to what little the local public library and my school's library had to offer. I learned a lot and it created useful background knowledge for when I was later involved in the design of floating-point units and math libraries in my professional career.

Well-known examples of ambitious student projects are (1) the blindingly fast Pascal compiler Anders Hejlsberg developed that later turned into the product Turbo Pascal. It cleverly rolled what are normally multiple stages in classical compiler construction into a single pass (2) Linus Torvalds' development of Linux, as he was curious what it would take to create his own Unix-like operating system for his new 386-based PC.

To ensure that other people's approaches are not cramping your creativity, I would recommend to first think hard about how to tackle the problem you posed yourself, implement that, and experiment with it. Failure to achieve any intermediate objective will provide a learning opportunity. The old adage applies: "If at first you don't succeed, try, try, try again".

After a while of applying your own ideas, start trawling the literature for relevant information. You will learn how to research independently by following both backward pointers (references cited by the publication you are reading) and forward pointers (publications that cite the publication you are reading). I would also encourage putting into practice some of the methods and algorithms found in the literature. The claims made are sometimes misleading, inaccurate, or downright false.

I am a retired software engineer who looked at plenty of resumes in his time. Many resumes from new college grads look very much alike, and these days it is common to see some projects listed. I would be looking for anything that indicates a deeper interest in (or excitement for) the subject matter, creativity, and persistence in pursuing a working software product. Plus points for a comprehensive, well-designed test framework, which is harder to achieve and requires more creativity than some may assume.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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