- This repo contains all of my assignments from the Coursera Specialization: Java Programming and Software Engineering Fundamentals
- Course 1: Programming Foundations with JavaScript, HTML and CSS
- Week 1: Designing a Web Page with HTML and CSS
- my-interests-html-only
- my-interests-with-css-added
- Week 2: Algorithms and Programming Concepts
- DukeLearnToProgram-env-trial
- try-it-using-vars-methods-functions
- rampup-variables-methods-functions
- try-it-using-for-loops
- rampup-loops-and-conditionals
- programming-exercise-modifying-images
- the-green-screen-algorithm
- programming-exercise-avanced-modifying-images
- Week 3: JavaScript for Web Pages
- try-it-buttons-with-divs
- try-it-Change-pages-interactively
- programming-exercise-todo-list
- try-it-canvas
- try-it-inputs-and-events
- programming-exercise-an-interactive-paint-canvas
- try-it-upload-and-display-an-image
- try-it-convert-an-image-to-grayscale
- try-it-green-screen-online
- Week 4: MiniProject - Image Filters on the Web
- filter-fun
- steganography-programming-exercise
- Week 1: Designing a Web Page with HTML and CSS
- Course 2: Java Programming: Solving Problems with Software
- Week 1: Fundamental Java Syntax and Semantics
- hello
- perimeter
- perimeter-assignment
- Week 2: Strings in Java
- find-gene-simple-and-test
- strings-first-assignments
- find-gene-while
- three-stop-codons
- strings-second-assignments
- debugging-code
- storage-resource
- strings-third-assignments
- Week 3: CSV Files and Basic Statistics in Java
- first-csv
- exports
- parsing-export-data
- hottest-temp
- hottest-temp-multiple-datasets
- hottest-temp-multiple-datasets-refactored
- parsing-weather-data
- Week 4: MiniProject - Baby Names
- baby-names
- make-gray-single
- make-gray-batch
- image-saver
- invert-images
- Week 1: Fundamental Java Syntax and Semantics
- Course 3: Java Programming: Arrays, Lists, and Structured Data
- Week 1 - Cryptography - Keeping Information Secret
- character-demo
- caesar-cipher
- implementing-the-caesar-cipher
- dice-rolling
- common-words
- breaking-the-caesar-cipher
- object-oriented-caesar-cipher
- cryptography-quiz
- Week 2 - GladLibs - Stories from Templates
- count-words
- word-frequencies
- words-with-arrays
- telling-a-random-story
- glad-lib
- word-frequencies-map
- improving-GladLibs
- Week 3 - Web Server Logs - From Logs to Visits
- log-entry
- web-log-program
- finding-unique-ip-addresses
- counting-website-visits
- Week 4 - MiniProject - Vigenère Cipher
- vigenere-program
- Week 1 - Cryptography - Keeping Information Secret
- Course 4: Java Programming: Principles of Software Design
- Week 1 - Earthquakes - Programming and Interfaces
- earthquake-magnitude-distance-demo
- closest-quakes-demo
- searching-earthquake-data
- earthquake-filter
- Week 2 - Earthquakes - Sorting Algorithms
- selection-sort-demo
- in-place-sort-demo
- earthquake-sort
- time-sort-demo
- quake-sort-demo
- distance-comparator-demo
- efficient-sort
- Week 3 - N-Grams - Predictive Text
- random-text
- interface-abstract
- word-n-gram
- word-gram-class
- Week 4 - Java - Tools and Libraries for Everyone
- Week 1 - Earthquakes - Programming and Interfaces
- Course 5: Java Programming: Build a Recommendation System
- Week 1 - Introducing the Recommender
- step-one
- Week 2 - Simple Recommendations
- step-two
- Week 3 - Interfaces, Filters, Database
- step-three
- Week 4 - Weighted Averages
- step-four
- step-five
- Week 1 - Introducing the Recommender
When I started this specialization, I had already graduated with a Bachelor's Degree in Computer Science from an unnoteworthy university in the United States. Even though I started with Computer Science for the first time with absolutely no previous experience in the second semester of my freshmen year, it was not until the beginning of my senior year did I really learn Computer Science in a proper and efficient way. My first 2 years and a half had been a real struggle with coding and learning new technical skills. Since I had no interest in the field when I started and I just chose to switch my major from Art to Comp Sci with the hope of getting a good job after graduating, learning to code, trying to understand the code, debugging, applying logical thinking, and so on were a real nightmare. I got depressed for quite a while. I went to classes just to fall asleep all along, I could never concentrate no matter how hard I tried. The consequence of it was that I never understood what my professors were talking about, I knew literally NOTHING. I managed to pass all my classes with (quite) a good grade thanks to the great support of my friends who helped me debug my code and by learning by heart what was mentioned in the slides and with a good amount of luck, my exam scores were not too bad. Moreover, for many of my classes, my professors were not that strict, so it was not hard to get an A. Despite the fact that I got some kind of technical jobs during college to put on my resume, those were not that technical. By that I mean, if you look at my previous experience on my LinkedIn profile, you will see what I did was not as serious as what a real SWE intern or undergrad research assistant did. But the real problem is, after all, I forgot everything I had learned since I did not understand it in depth, I still knew nothing and coding had become something scarier and scarier to me when I could not even wrap my mind around my code, I just copied from the slides, here and there, and combined them together, tons of bugs happened without me being aware of what was going on. Thankfully, my friends came and helped me debug so I could feel relieved. I failed so hard after tons of attempts to learn Data Structures, Algorithms, and object-oriented programming. I took a few courses outside of college but my concentration skill was so bad that I kept falling asleep during those classes. There was a time when just opening my computer could make me yawn and feel sleepy already. Thinking about coding made me so frustrated. While so many people out there that I knew from my college or others were doing so well, getting fancy offers from dream companies and talking confidently about Data Structures, Algorithms, and coding interview stuffs, I felt nothing but a huge gap in my knowledge. I was asking myself, how could I become a software engineer when I was so scared of coding? And even if I could manage to get a job at a small company, how would I perform at work? I would be fired soon for sure.
Fortunately, things did not work out that way, I was lucky enough to meet someone who always means a lot to me. I would say he is my very first true mentor, the first to help me learn to code and get the point of Data Structures and Algorithms little by little. Thanks to his patience and perseverance in teaching someone who was so bad at coding like me, the logic started to make sense to me and I could manage to solve coding questions. Once I felt more confident, I thought I could do better and get better every day. Since then, I have been improving consistently. It was always hard for me, but I was trying so hard too. Eventually, everything has become clearer as I did not mind spending all of my free time, weekends, breaks, literally anytime I can just to practice coding and dig deeper and deeper into it. My debugging skills have got better when at least, I am not freaking out whenever an error message shows up or making the same mistakes again and again as I used to anymore. My concentration has improved significantly as I hardly fall asleep when learning online courses and working on my project or any coding problem. After my graduation, my whole summer was well-spent on learning technical skills. I have touched on Web Development, a little cross-platform Mobile Development, new programming languages, Version Control, problem-solving, and Object-oriented programming in Java. I took Object-oriented programming in Java in my junior year in college. It was my hardest time then and I have forgot almost everything about Java and OOP after passing that class. Now, since I know that Java is an essential skill for my job (yeah, I managed to get a job), I have decided to learn it again, although I used to hate it a lot. I found a really good specialization offered by Duke University through Coursera and enrolled without a second thought. Throughout the course, I got exposed to so many things from basic web development with HTML, CSS, and JavaScript, core Java, and some principles of Software Design to finishing a capstone project using everything I have learned in the specialization. I got the chance to work on lots of coding assignments which were easy at first but more challenging towards the end. I was so surprised that I could spend hours working on those without yawning and I have found Java so interesting and powerful. I feel really grateful for the rigorous training and the thoughtful contents of this specialization. After 2 weeks and a half of just staying home and learning, I have finished 5 courses in this specialization, woohoo. I am about to start the Object Oriented Java Programming specialization today. I am more passionate about coding and programming now, I can learn it non-stop. One thing I have learned and it is so true: If you want to be good at something, just keep doing it! That’s the only way. So here is my achievement, I’m ready for the next challenge!
To all the friends who have helped me debug my code and taught me new technical stuff, thank you so much. I am grateful for all my instructors from college and online courses on different platforms too. And finally, I could not have overcome the hardship without my beloved mentor who was the first to truly help me shed some light on Data Structures and Algorithms so that I could build up a foundation in Comp Sci all over again during the past year. Thank you all so much, I’m so grateful for all the challenges, hardships, and rewards to grow from a technophobe to a technophile.