A Beginner’s Guide to CS topics for First Year Engineering Students

Learning is a Journey.You will never know everything you need to know to solve all your problems.

Alternatives to learning from textbooks

Most people find the task of reading books, courses to be daunting and don’t take the first step. To keep yourself motivated to take that first step,

  • You can follow few blogs such as paulgraham, joelonsoftware and also technical people e.g thegeekstuff (thegeekstuff) on Twitter. But blogs are just first steps.
  • The most helpful method is to have a motivating project at hand and to learn the necessary stuff required for that. There are lot of good projects.
  • You can also participate in forums, discussion groups and meetups to interact with fellow tech enthusiasts.

For CS topics, we have a tech Group on Facebook, with around 2Lakh members, and lot of people from research and academics. I originally started this forum, but now it has taken life on its own with lot of prominent people like PhD scholars and book authors contributing.

Learning new skills is time consuming because currently there are no good websites that help in adaptive learning or structure the course according to specific needs of the user.

Most of the current websites are good, if you already know some basics about the topic, but what is missing is the perspective from a newbie.

At CareerHunt, we give a good plan for learning a particular topic. We manually aggregate the best content on the web for a particular topic. We validate our contents by asking feedback from freshers – if they could follow our lesson plan.

We believe this kind of adaptive learning can shorten the time taken to learn new skills. Courses are structured using hyperlinks of concepts rather than bookish linear way

Learning Techniques:

Start with a small project and learn the necessary materials. Think of how you would have approached a particular problem before looking at the existing solutions.

Take a concrete product and get an understanding of the high level architecture.

For example,

  • if you are interested in OS, read about linux kernel at high level and various algorithms .
  • Or if you like database, look at Sqlite or mysql.
  • Think of using a simulators to understand the flow . For example if you are learning Architecture, use SimpleScalar to know how instructions are processed.
  • For networking there is NS.

Participate in forums like stackoverflow, quora, programming blogs (Joel on Software, Coding horror, AllThingsDistributed, Steve Yegge for example but this widely varies depending on your interest)

Some concepts are hard to understand, but most concepts are harder  to discover in first place (even if they are easy to understand and even obvious —  otherwise everything in CS would have been discovered in 5 years after  invention of the computer ).

The stack algorithm for evaluating expressions seems obvious now, but there have been hundreds of not-so-neat tricks that were deployed by hackers earlier

The breakthrough by computer scientists are achieved after years of  struggle with ideas. On top of it, publishing the ideas and getting  reviewed for publication takes lot of time, So what might seem obvious  in retrospective may not be in fact obvious.

Quicksort seems obvious now – its inventor  C.A.R.Hoare narrates an  incident that when he discovered quicksort, it was hard to convince the  people about its efficiency (and even correctness).

Dijkstra narrates that he was working for long time on shortest path  problem, and suddenly one day on a vacation he discovers the proof.  (office hours seem bad even for computer scientists )

I have listed the references for various CS topics which i have used during my engineering course.

  • Polya– How to solve it
  • Engel – Problem solving strategies
  • Dromey How to solve it by computer

— a common problem in many textbook presentations is many are theoretical
— suggest students to start with algorithms used in databases ( many practical applications )

  • Start with basic algorithms in sorting and searching .
  • Especially merge-sort will teach about divide&conquer
  • Hashing – is used to partition data
  • Merging – you have two input streams and combine them into a single stream
  • Dynamic programming is used for implementing join algorithms
  • some binary tree exercises

refer hashing https://www.youtube.com/watch?v=AfKV7YXGY-I

  • pick a database like mysql (install on ubuntu)
    • try designing a simple database – it may be a library management or ticket booking (redbus) or bookstore (flipkart)
    • how to arrange data so that it can be efficiently accessed
  • what are the entities , relations
    • entities in ecommerce(flipkart) – product(book), customer , order
    • relationship – a customer orders a book
  • if data is repeated in multiple places , there is problem of anamolies
    • so there is need for normalization
    • how the data is stored on disk. file organization / btree
  • File structures Book by Michael J. Folk
  • Most of the algorithms (binary search tree) were in-memory with random access (accessing any address location)
    • whereas in disk , random access is not possible – you have to access sequentially (block by block) – so contiguous storage like arrays is preferred
    • so have a combination of contiguous storage + flexibility of trees
  • when data is too large to fit in memory, external sorting algorithms
  • codd – instead of nesting data , use relation tuples
  • relational algebra simplifies programming (you can reason about it). SQL is a language that implements this relational algebra
  • you can learn a bit about optimizing SQL queries. How queries are executed parse tree of sql query
  • CL Liu and Rosen
  • DM and programming are related in same way as toc and compilers
  • to understand the importance of DM, imagine a programmer trying find the names occuring in 2 files
  • kiran sir always stresses the importance of discrete
  • Linear algebra
  • implement a recursive descent parser – take a simple grammar for evaluating arithmetic expressions
  • lex and yacc (from kernighan and pike book)
  • we find there are two ways of approching the problem of parsing — top down vs bottom up
  • when parsing a language (english)- we have these layers – recognize words , recognize sentences , recognize meaning. similar with parsing a computer langue
  • ref http://www2.gvsu.edu/boucharj/Prog1.c
  • Memory hierarchy (keep frequently accessed things closer)
  • Hamacher
  • Digital logic – appendix chapter from Hamacher
  • build a computer from first principles
  • nand2tetris https://www.youtube.com/watch?v=iE7YRHxwoDs
  • layers build logic-gate / memory / ALU / CPU
  • Peterson Davie
  • Journey of letter via post box goes through layers
  • Layers each packet
  • All systems courses are about building layers upon another layer

Join Our Forum discussion on various CS topics and subscribe our Youtube channel to get updates on webinars.