> my university is going to force me to take their summer training on web development which is the thing that I totally hate
I get it. I totally get you. I used to hate "web development" in comparison to "actual software development", be it DM, AI/ML, Data Visualization etc Computer Science. I used to believe that Science is better than Application/Engineering.
​
I went that way all through my undergrad in India. I used to tinker my own applications and projects for a portfolio over the summer and winter breaks. I learned, on my own, Android App development, DM/ML/Data Visualization in Matlab and R. None of these were taught in my curriculum in my undergrad uni. While, I was offered and suggested time and time again to learn "web development" - in PHP, J2EE, .NET etc. I ignored them.
​
When I was completing Android App development and applying for MS, the world had shifted from Desktop applications to a really great demand in the Web (Web Apps - Dynamic websites, Mobile Apps, IoT and Cloud had emerged). The age of Desktop applications and software had come to an end. Everything was on servers and cloud services.
​
When I got into grad school in US. You know what's the first thing they taught us? RESTful Web App development! The tools that the newest undergrads used were industry standards. Version Control with Git/GitHub, CI/CD with TravisCI, testing etc. These were the tools of the trade which every student used.
​
> My area of interests are Data Science, Computer Vision, and Psychology. I tried to get into Data Science but, seniors said that learn Mathematics first. When I tried Computer vision, they said learn linear algebra first.
​
During undergrad in my third year when Digital Image Processing started, I had to put to use most of my matrix and vector knowledge to process and manipulate an image's pixels. We handcrafted zoom filters and colour filters. Knowing how to read, understand and code a mathematical formula into code was the foremost requirement. This understanding is very helpful now to me using the various image recognition and vision APIs from Google for mobile apps etc.
​
Also, when my real DM & Data Visualization classes picked up in grad school (I had AI/DM in undergrad final year but entirely theory), the statistics were so quickly covered a lot of students had to revise or relearn statistics to understand what's being done in class, even when our class was mostly hands on. That's when I realized how bloody important was maths, even the not so commonly used probability, statistics and calculus. Hell, I took a Bioinformatics class which was one of the classes offered further covering applied DM/Machine Learning into genomics. The first class started with ACTG...adenine etc proteins building the DNA and how its read into a program and ordered or sorted. All CS students who took the class switched to other classes which were unfortunately not focused on DM but other things like computer networks etc. I knew these from 10th grade. I stuck. And I loved the course. Even high school biology helped in gaining perspective of data and patterns we were mining.
​
Some students just quit the MS program in two months. Because they were not fluent in Java and couldn't learn or keep up with the class in J2EE etc. Knowing one or two languages (preferably an OOP language) to a good degree (of skill and comfort) is far more useful than any theoretical topic you can pick up in CS. The theory will do me no good if I don't have decent knowledge and understanding of the tool/language.
​
TLD/DR:
>So, now I am just banging head over books. I don't know what to do, I am stuck.
>
>I don't want to waste my summer attending something that I am not interested in, please guide me.
​
[Year 1-2] You should first focus on one OOP language of your choice (Python, Java etc). In a language learn;
- control flow (loops, if/else etc)
- data manipulation (file handling)
- using 3rd party & standard libraries + reading the documentation
- using a database system (plus points for remote database or cloud storage)
- code refactoring + generating documentation + tests etc
- parallelization (multithreading)
- some sort of UI (CLI is done by everybody go the extra mile build web UI or desktop GUI).
​
For your first year, this will be the backbone of your programming career. You learn one type of language (OOP or procedural etc) you can learn all other similar kinds quickly.
​
[Year 1-2-3] Your tools and processes should come second. Learn why & how to use Git (a version control system), debugger, linter, IDE, profiler, testing/logging suite and CI/CD (Continuous Integration / Continuous Delivery, this is the automation part which streamlines all previous tool usage). This is the fundamental difference between I am a programmer (from a two-hour workshop with blinking toy robot with copied code) and I am a professional/engineer/expert (Obligatory joke). Everything about your tools, IDE etc can be found online or on youtube or the documentation which you can follow and learn on your own. Your uni might never teach you. Also, read New Programmer's Survival Manual.
​
[Year 2-3-4] Third, "For Science!". It is not necessary to go for the maths first and then the Comp. Science. There are libraries and existing tools which abstract away a lot of science and maths involved. You'll rarely build an in-memory sorting for thousands of datasets when your database can sort it with extreme efficiency on its own and all you need is to run a one-line query. Pick one very small subset and use case. Build an app for that (building mobile apps is in vogue in comparison to web apps.).
For example in Computer Vision: Build an app that recognizes and tags fruits.
- [Y1] Do you know how to build an app? No? Learn how to build an app. Use your Java etc language skills to learn app building.
- [Y1] Do you know Java enough to follow how to build an app? No? Learn Java (follow any decent book - I suggest Head First Series).
- [Y1] Do you know how to use a camera on an app or upload an image? No. Learn it from that app's SDK documentation.
- [Y1-2] Do you know how to use an existing ML tool to recognize images? No. Learn Firebase ML Kit etc online tools.
- [Y2-3-4] Do you want to write your own ML model that will recognize only Bananas, cause Mangoes and other fruits are overrated? Yes? Learn Data Mining + Machine learning using Tensorflow and Tensorflow Lite or start with R or Python's scikit-learn. Maybe take an online course? Machine Learning with TensorFlow on Google Cloud Platform Specialization by Google Cloud which will get you a certificate too if you pay for it or get financial aid.
​
Go at your own pace. You can take courses online or by training agencies or follow them on your own with a book (following chapter by chapter especially books which continuously build a project throughout the book slowly adding components to it). I'll suggest you start by building small programs. Then small applications and then eventually bigger systems-wide projects (also called 3 tier or multi-tier architecture). Build a versatile set of skills and portfolio to back it, you're golden.