It's already been three weeks since the bootcamp started. Time flies!

Our goal for the first month is to familiarize/learn Unix commands, Text Editor (We will be using Emcas), Version Control (Git), Python. However, in the very first few days of the classes I realized that the tools, and resources provided by Noufal Ibrahim will not only help us develop our technical skill sets but it'll also help us develop right mindset. Following are some of the few points that stuck with me.

Mindset:

1. The first few programs you'll write will not be very good but underneath lies a good program. Very good analogy Noufal Ibrahim gave - if you want to become a good writer, the only way to become a good writer is to start writing. The first million or so words you'll write will be not be good but after you've written million words, the good words will come. Similarly, get that bad code out of the way as soon as possible.

2. Only way to learn to code is by coding daily. As I think of it I realized that it's like learning to play a piano (or any other musical instrument) - you can't just learn to play a piano by reading books. The only way to learn it by playing/practicing it daily.

3.  Internalize Unix and Emacs commands. So practice daily until it becomes a muscle memory and becomes a part of us/second nature. In the beginning do the grunt work and put in the time and effort but in the long run it'll all pay off.

Skillset:


1. First we installed Linux on my laptop. They say creating a partition and downloading native Ubuntu on MacBook is little tricky and if something goes wrong you could lose all the data on your laptop. So we decided to install virtual Linux. I downloaded VirtualBox to use the virtual Linux on my laptop. It was easy to download but at times I found it bit slow. However, I'll increase the RAM (currently I've allocated 2GB) and see how it works.

2. To study Unix we're using "The Unix Programming Environment" by Brian W. Kernighan | Rob Pike. It's an old book but still very useful. My next goal is to create a cheatsheet for unix commands and practice them until I memorize them. I am looking for a useful tool where I can type Unix commands and it'll give me an output, and allow me to write my comments. I've used Jupyter notebook for Python, so something similar. Do you know any tools or have any recommendations? Please let me know. Thanks in advance.

3. We were all given one Unix command. Our task was to study, understand and present it to the class. I was given "Join" command.

Unix:

So what is Join command?- Join combines lines of two files on a common field. By default it'll combine 1st column.

- you can join the content of the firstfile and second file into a new file

$ join firstfile secondfile > thirdfilename.txt

- Sometime one file can have an extra line. By default it'll only print pairable lines. But sometimes the unpairable lines are also important. In such case we can use -a option with join command. It'll help display unpairable line(s).

$join firstfile secondfile -a 1

- You can also print only unpairable lines

$ join firstfile secondfile -v 1

- Sometimes, it's not necessary that the common key in the both files always be the first column. Join command provides an option if the common key is other than the first column. For e.g. common fields in the files are column 2

$ join -1 2 -2 2 firstfile secondfile

//-1 2(1st file 2nd column)//-2 2(2nd file 2nd column)

Wrapping Up:

It's been a good first three weeks. I've already learned a lot. Thanks to Noufal Ibrahim's experience, and his teaching style. I look forward to learn more, and build things that would matter to people. I am feeling a lot of mix emotions at the moment. At times I am excited to learn new stuff, but at the same time I am also little overwhelmed with all these information/learning curves. I am hoping for the best.

Thank you for reading.