ওয়েব ডেভেলাপমেন্ট-এ ক্যারিয়ার

ওয়েব ডেভেলাপমেন্ট শব্দটা শুনে অনেকেই নাক সিঁটকায়, ‘ও, ওয়েবসাইট বানানো? এটা কোনো কাজ হলো?’ তো এরকম ভুল ধারণা থাকাটা দোষের কিছু না। তাই আজকে ওয়েব ডেভেলাপমেন্টের ক্যারিয়ার নিয়ে কিছু আলোচনা করবো।

একটিমাত্র পেইজ দিয়েও একটি ওয়েবসাইট তৈরি করা যায়, আবার ওয়েবসাইটটি ফেসবুকের মতো বিশাল হতে পারে। তাই কাজের পরিধি নির্ভর করবে ওয়েবসাইটের পরিধির ওপর। এখন কোনো ওয়েব সাইট বা ওয়েব অ্যাপ্লিকেশন তৈরির প্রথম কাজ হচ্ছে ফিচারগুলো নির্দিষ্ট করা, মানে সেখানে কী কী ফিচার থাকবে তার একটি তালিকা তৈরি করা। তখন ইউএক্স বা ইউজার এক্সপেরিয়েন্সের বিষয়গুলোও খেয়াল রাখতে হবে। কারণ কেবল ফিচার থাকলেই হবে না, সেই ফিচার ব্যবহারকারীরা কিভাবে ব্যবহার করবে, সেটাও নির্ধারণ করতে হবে। ফিচারগুলো নির্দিষ্ট করা হয়ে গেলে প্রথম কাজ হচ্ছে ওয়েবসাইটটি ডিজাইন করা। মানে ওয়েবসাইটি দেখতে কেমন হবে। এই ডিজাইনের কাজটি করেন ওয়েব ডিজাইনার বা গ্রাফিক্স ডিজাইনার। সৃজনশীলতা ছাড়াও একজন ডিজাইনারের আধুনিক ওয়েবসাইটের ডিজাইন, রং, ফন্ট ইত্যাদি বিষয়ে সম্যক ধারণা থাকতে হবে। ওয়েব ডিজাইনাররা সাধারণত ফটোশপ এবং ইলাস্ট্রেটর সফটওয়্যার ব্যবহার করেন, তাই এ দুটি সফটওয়্যার ব্যবহারে দক্ষতা থাকা প্রয়োজন।

ডিজাইনের পরবর্তি কাজ হচ্ছে মার্ক-আপ। মানে ডিজাইনার যেই ডিজাইনটি করেছেন, সেটি থেকে এইচটিএমএল (HTML → Hyper Text Markup Language) ফাইল তৈরি করা। তবে শুধু HTML এর কাজই যথেষ্ট নয়। সাথে দরকার CSS (Cascading Style Sheet)। সিএসএস ব্যবহার করে এইচটিএমএল ফাইলে স্টাইল আনা যায় যাতে ওয়েবসাইট দেখতে হুবুহু তার ডিজাইনের মতো হয়। এই কাজগুলো করেন মার্ক-আপ ইঞ্জিনিয়ার।

বড় কোম্পানীগুলোতে মার্ক-আপ ইঞ্জিনিয়ার এর আলাদা পোস্ট থাকে, তবে অনেক জায়গাতেই সেই কাজটা করতে হয় ফ্রন্ট এন্ড (front end) ইঞ্জিনিয়ারের। তবে ফ্রন্ট-এন্ড ইঞ্জিনিয়ারের মূল কাজ হচ্ছে জাভাস্ক্রিপ্টে। জাভাস্ক্রিপ্ট একটি প্রোগ্রামিং ভাষা যেটি ব্যবহার করে প্রোগ্রাম লিখলে সেটি ব্রাউজার থেকে চলে। ইন্টারএকটিভ ওয়েবসাইগুলোর জন্য জাভাস্ক্রিপ্ট অপরিহার্য। এই ভাষাটি জানতে হয় ফ্রন্ট এন্ড ইঞ্জিনিয়ারের। সাথে কয়েকটি ফ্রেমওয়ার্কও। যেমন জেকুয়েরি (jQuery), ইএক্সটিজেএস (ext-js), প্রটোটাইপ (prototype) ইত্যাদি। এসব জানার পাশাপাশি ওয়েব টেকনোলজির নানা বিষয় সম্পর্কেও স্বচ্ছ ধারণা থাকা দরকার। যেমন এক্সএমএল (XML), জেসন (JSON), এজাক্স (Ajax), ক্লায়েন্ট-সার্ভার ইন্টারএকশন ইত্যাদি।

ওয়েবসাইটে ব্যবহারকারির দেওয়া ইনপুটের উপর ভিত্তি করে বিভিন্ন কাজ হয়। যেমন ফেসবুকে কেউ একটা স্ট্যাটাস দিলো, সেটি তার ফেসবুক বন্ধুতালিকার সবাই দেখতে পাবে, আর পাবলিক হলে ফলোয়ারদের নিউজফিডেও চলে যাবে। এই কাজটি করার জন্য সার্ভারে কিছু কোড লেখা লাগে। আবার ধরা যাক, কেউ অনলাইনে কেনাকাটা করছে, সেখানেও সার্ভারে বেশ কিছু কোড রান করে। সার্ভারে এই প্রোগ্রামগুলো যিনি তৈরি করেন, তাকে বলা হয় ব্যাক-এন্ড ইঞ্জিনিয়ার (back-end engineer)। ব্যাক-এন্ডের কাজের জন্য জনপ্রিয় প্রোগ্রামিং ভাষা হচ্ছে পিএইচপি (PHP), পাইথন (Python), রুবি (Ruby), জাভা (Java) ইত্যাদি। একজন ভালো ব্যাক-এন্ড ইঞ্জিনিয়ারের কেবল প্রোগ্রামিং করতে পারাটাই যথেষ্ট নয়, সেই সাথে ওয়েব নিরাপত্তা, ডাটাবেজ, ওয়েব আর্কিটেকচার এরকম নানান বিষয়ে গভীর জ্ঞান থাকা দরকার। আবার ওয়েবসাইটকে স্কেলেবল (scalable) করাটাও তার কাজের মধ্যে পড়ে। একটি উদাহরণ দিই। প্রতি বছর বিভিন্ন পাবলিক পরীক্ষার ফলাফল যখন প্রকাশ হয়, ওয়েবসাইটে ঢুকলে মনে হয় সাইট হ্যাং হয়ে আছে – কোনো কাজ করছে না। তার মূল কারণ হচ্ছে এসব ওয়েবসাইট যেভাবে তৈরি করা হয়েছে, সেগুলো স্কেলেবল নয়। হয়ত ১০০ ব্যবহারকারির জন্য ওয়েবসাইট কাজ করছে, কিন্তু যখনই দশ হাজার কিংবা এক লক্ষ মানুষ সেই ওয়েবসাইটে হিট করছে, তখন ওয়েবসাইট আর কাজ করছে না, কারণ এত লোড সে সামলাতে পারছে না। একজন ভালো ব্যাক-এন্ড ইঞ্জিনিয়ারের পক্ষে এই সমস্যাটির সমাধান সম্ভব।

যেসমস্ত ওয়েবসাইট খুব বেশি ডাটা নির্ভর, সেখানে ডাটাবেজ ডিজাইন ওয়েবসাইটের পারফরমেন্সের উপর বেশ প্রভাব ফেলে। অনেকসময় ব্যাক-এন্ড ইঞ্জিনিয়ার ডাটাবেজের কাজ করলেও কিছু কিছু ক্ষেত্রে প্রয়োজন হয় একজন দক্ষ ডাটাবেজ আর্কিটেক্ট-এর। তিনি ডাটাবেজ ডিজাইন এবং অপটিমাইজেশনের কাজ করে থাকেন।

একটা ওয়েব সাইট বা ওয়েব অ্যাপ্লিকেশন তৈরির শেষ ধাপ হচ্ছে টেস্টিং। টেস্টিংয়ের কাজটি করেন ওয়েবসাইট টেস্ট ইঞ্জিনিয়ার কিংবা কোয়ালিটি অ্যাসুরেন্সের লোকজন। সাধারণ ওয়েবসাইটে যেমন ওয়েবসাইট ঠিকমতো কাজ করছে কি না সেটি টেস্ট করলেই চলে, কিছু কিছু ওয়েবসাইটে আবার লোড টেস্ট করতে হয়, যে অনেক বেশি ব্যবহারকারি একসাথে আসলে ওয়েবসাইটের কি অবস্থা হয়। আর নিরাপত্তার ব্যাপারটিও টেস্ট করাটা খুবই গুরুত্বপূর্ণ। তাই ওয়েবসাইটের প্রকার ভেদে বিভিন্ন লেভেলের দক্ষতার লোকজন দরকার হয়, যারা ওয়েবসাইটি টেস্ট করেন।

সার্ভারে বিভিন্ন সফটওয়্যার ইনস্টল করা, সেগুলো রান করা, মনিটর করা, সার্ভারের সংখ্যা বাড়ানো-কমানো, ফায়ারওয়াল বসানো ইত্যাদি কাজের জন্য দরকার একজন সিস্টেম এডমিনিসস্ট্রের। যিনি বিভিন্ন টুল ব্যবহার করে সেই কাজগুলো করেন। সিস্টেম এডমিনিসস্ট্রেটর-এর নখদর্পনে থাকতে হয় সার্ভারের অপারেটিং সিস্টেমের নানান বিষয়।

তাহলে দেখা যাচ্ছে একটি বড় ওয়েবসাইট বা ওয়েব অ্যাপ্লিকেশন তৈরিতে অনেক আয়োজন আর সেই কাজগুলো করার জন্য প্রয়োজন হরেক রকম দক্ষতাসম্পন্ন মানুষের। আপনি যদি ওয়েব ডেভেলাপমেন্টে আগ্রহী হন তবে আপনার দক্ষতা, লেখপড়া ও আগ্রহের ভিত্তিতে নির্বাচন করুন সঠিক ক্যারিয়ার।

পুনশ্চ : ওয়েবের উপর ধারণা আরো পাকাপোক্ত করতে এই ফ্রি অনলাইন কোর্সটি করে ফেলুন : http://dimikcomputing.com/course/web-concepts/। কোর্সটি সম্পূর্ণ বাংলায়।

জাভা দিয়ে ছোট্ট ওয়েব ক্রলার

জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করে সহজ একটি ওয়েব ক্রলার (বা স্পাইডার বা স্ক্রেপার)-এর কোড শেয়ার করছি। কোডটি আমি অনেক আগে একটি প্রজেক্ট করতে গিয়ে লিখেছিলাম। এটি সম্পূর্ণ ওয়েব ক্রলার নয়, কেবল একটি নমুনা (বা উদাহরণ) মাত্র।


কাজের ধাপ:

১) ব্যবহারকারীর কাছ থেকে ইনপুট হিসেবে ওয়েব সাইটের এড্রেস (ইউআরএল) নিতে হবে।

২) ওই ইউআরএল-এর এইচটিএমএল সোর্স কোড পড়তে হবে বা বের করতে হবে (getUrlContent(url))।

৩) এইচটিএমএল সোর্স কোড থেকে সব হাইপার-লিঙ্কগুলো বের করতে হবে (getHyperlinks(content))।

৪) প্রতিটি ইউআরএল-এর জন্য এইচটিএমএল সোর্স কোড বের করতে হবে এবং সেই সাথে এইচটিটিপি রেসপন্স কোডও বের করতে হবে (getHTTPResponseCode(url))।

 

সম্পূর্ণ সোর্স কোড নিচে দেওয়া হলো :

 import java.io.BufferedReader;    
 import java.io.IOException;    
 import java.io.InputStreamReader;    
 import java.io.FileWriter;    
 import java.io.BufferedWriter;    
 import java.net.HttpURLConnection;    
 import java.net.URL;    
 import java.net.SocketTimeoutException;    
 import java.net.UnknownHostException;    
 import java.util.ArrayList;    
 import java.util.regex.Matcher;    
 import java.util.regex.Pattern;    
 public class Checker {    
     public static void main(String args[]) throws Exception    
     {    
         String url = null;    
         if (args.length > 0) {    
             url = args[0];    
             System.out.println(url);    
         }    
         else {    
             System.out.println("Please enter the URL as a command line parameter.");    
             return;    
         }    
         String content = getUrlContent(url);    
         ArrayList<String> links = getHyperlinks(content);    
         FileWriter fstream = new FileWriter("out.txt");    
         BufferedWriter out = new BufferedWriter(fstream);    
         int status;    
         for (int i = 0; i < links.size(); i++) {    
             url = (String) links.get(i);    
             System.out.println(url);    
             status = getHTTPResponseCode(url);    
             if (status != 200) {    
                 if (status > 0) {    
                     out.write(url + ", HTTP Response Code: " + status + "n");    
                 }    
                 else {    
                     out.write(url + ", Unknown Errorn");    
                 }    
             }                
         }    
         out.close();    
     }    
     private static ArrayList<String> getHyperlinks(String html)    
     {    
         ArrayList<String> links = new ArrayList<String>();    
         Pattern p = Pattern.compile("<a [^<>]*?href="(http.*?)"");    
         Matcher m = p.matcher(html);    
         while(m.find()) {    
             links.add(m.group(1));    
         }    
         p = Pattern.compile("<a [^<>]*?href='(http.*?)'");    
         m = p.matcher(html);    
         while(m.find()) {    
             links.add(m.group(1));    
         }    
         return links;    
     }    
     private static String getUrlContent(String targetUrl) throws Exception    
     {    
         HttpURLConnection connection = null;    
         BufferedReader br = null;    
         StringBuilder sb = null;    
         String line = null;    
         String content = null;    
         URL target = null;    
         try {    
             target = new URL(targetUrl);    
             connection = (HttpURLConnection)target.openConnection();    
             connection.setRequestMethod("GET");    
             connection.setReadTimeout(30 * 1000); // timeout 30 seconds    
             connection.connect();    
             br = new BufferedReader(new InputStreamReader(connection.getInputStream()));    
             sb = new StringBuilder();    
             while ((line = br.readLine()) != null) {    
                 sb.append(line);    
             }    
             content = sb.toString();    
         } catch (SocketTimeoutException e) {    
             System.out.println("Timed Out!");                
         } catch (UnknownHostException e) {    
             System.out.println("Unknown Host");    
         } catch (Exception e) {    
             System.out.println("Unknown Error");    
         }    
         finally {    
             connection.disconnect();    
             br = null;    
             sb = null;    
             connection = null;    
         }    
         return content;    
     }    
     private static int getHTTPResponseCode(String targetUrl) throws Exception    
     {    
         HttpURLConnection connection = null;    
         int response;    
         URL target = null;    
         try {    
             target = new URL(targetUrl);    
             connection = (HttpURLConnection)target.openConnection();    
             connection.setRequestMethod("GET");    
             connection.setReadTimeout(10 * 1000); // timeout 10 seconds    
             connection.connect();    
             response = ((HttpURLConnection) connection).getResponseCode();    
         } catch (SocketTimeoutException e) {    
             response = -100;    
         } catch (UnknownHostException e) {    
             response = -101;    
         }catch (Exception e) {    
             response = -102;    
         }    
         finally {    
             connection.disconnect();    
             connection = null;    
         }    
         return response;    
     }    
 }    

সিএসই বিভাগের ক্লাস শুরুর আগে

তোমরা যারা বিভিন্ন বিশ্ববিদ্যালয়ে কম্পিউটার সায়েন্স বা কাছাকাছি কোনো বিষয়ে ভর্তি হয়েছ এবং ক্লাশ শুরুর অপেক্ষা করছ, তাদের জন্য আমার অভিজ্ঞতা থেকে কিছু পরামর্শ। উল্লেখ্য যে, এই লেখায় যেসব বইয়ের কথা বলেছি, সেগুলো আমারই লেখা।

screen-shot-2016-12-02-at-9-17-16-am

তোমার যদি কম্পিউটার না থাকে, তাহলে কম্পিউটার কিনে ফেলো, যত কম টাকায় পারা যায় (প্রোগ্রামিং করার জন্য দামি ল্যাপটপের প্রয়োজন নেই)। ডেস্কটপের চেয়ে ল্যাপটপ কেনাই ভালো হবে, কারণ বিদ্যুৎ না থাকলেও ব্যাটারিতে চলবে। ক্লাশ শুরুর আগে তুমি যদি প্রোগ্রামিং (সি ল্যাঙ্গুয়েজ) মোটামুটি শিখে ফেলতে পারো, তাহলে অনেক এগিয়ে যাবে এবং ভার্সিটি লাইফ তোমার জন্য অনেক সহজ ও আনন্দময় হয়ে যাবে। প্রোগ্রামিং শেখার জন্য বাংলায় ‘কম্পিউটার প্রোগ্রামিং (প্রথম খণ্ড)‘ বইটি পড়তে পারো।

cpbook1img

এটি নীলক্ষেতে ও রকমারি ডট কম (rokomari.com) -এ কিনতে পাওয়া যায়। আর টাকার সমস্যা থাকলেও অসুবিধা নাই। বইটি অনলাইনে ফ্রি পড়া যায়। আর বইয়ের সাথে সাথে তোমরা চাইলে অনলাইনে একটি প্রোগ্রামিং কোর্স করে ফেলতে পারো। এটিও সম্পূর্ণ ফ্রি, কোনো টাকাপয়সা লাগবে না। একা একা কিংবা বন্ধুরা কয়েকজন মিলে শিখতে পারো। বই এবং (অথবা) কোর্স করার পরে তোমরা কম্পিউটার প্রোগ্রামিং বইয়ের ওয়েবসাইটে দেওয়া প্রবলেমগুলো সলভ করার চেষ্টা করতে পারো। আর সমস্যাগুলোর সমাধান নিয়ে আলোচনা করেছি ‘৫২টি প্রোগ্রামিং সমস্যা ও সমাধান‘ বইতে। এই সমস্যাগুলোর সমাধানের চেষ্টা করলে তোমার প্রোগ্রামিং ও সি ল্যাঙ্গুয়েজের বেসিক শক্ত হয়ে যাবে। ভার্সিটির ক্লাশ শুরুর আগে এতটুকু ভালোভাবে রপ্ত করতে পারলে তোমার আর পেছনে ফিরে তাকাতে হবে না।

ক্লাশ শুরু হওয়ার পরে বইগুলো আবার পড়বে (হ্যাঁ, প্রোগ্রামিং বই কেবল একবার পড়ার জন্য নয়)। তারপরে “কম্পিউটার প্রোগ্রামিং ২য় খণ্ড” বইটি পড়া শুরু করে দাও। বইতে প্রোগ্রামিং ও সি ল্যাঙ্গুয়েজের বেশ কিছু জটিল ও গুরুত্বপূর্ণ বিষয় নিয়ে আলোচনা করা হয়েছে।

cpbook2pp         52_book_cover

(বইগুলো রকমারি ডট কম ছাড়াও ঢাকায় নীলক্ষেতের হক লাইব্রেরি ও মানিক লাইব্রেরি-তে পাওয়া যায়।)

rokimg_20150817_102370

আর ভার্সিটিতে অনেক সিনিয়র ভাইয়া-আপুরা তাদের নিজেদের দূর্বলতা ঢেকে রাখার জন্যই হোক, কিংবা নিজেদের কম জানার কারণেই হোক, জুনিয়রদের অনেক উল্টা-পাল্টা গাইডলাইন দেয় – ‘এটা করলে ভালো হবে’, ‘সেটা করার দরকার নাই’ এরকম। তাই আমি বাংলাদেশের এক ডজন সফল প্রোগ্রামারের সাক্ষাৎকার নিয়েও একটি বই লিখেছি ‘প্রোগ্রামিং ক্যারিয়ার গাইডলাইন: এক ডজন প্রোগ্রামারের কথা‘ – যেটি শিক্ষার্থীদের অনুপ্রেরণা যোগাবে ও সঠিক পথ দেখাবে।

প্রোগ্রামিং যাত্রা শুভ ও আনন্দময় হোক।

প্রোগ্রামিং শেখার ১০টি লিঙ্ক

যারা প্রোগ্রামিংয়ের জগতে একেবারেই নতুন এবং বাংলা ভাষায় প্রোগ্রামিং শিখতে চায়, তাদের জন্য ১০টি দরকারি লিঙ্ক : 

১) দ্বিমিক কম্পিউটিং – অনলাইনে বাংলায় তথ্যপ্রযুক্তি বিষয়ক বিভিন্ন ফ্রি কোর্স (ভিডিও লেকচার)। নতুনদের জন্য সি প্রোগ্রামিংয়ের ওপরও একটি কোর্স রয়েছে এখানে। :http://dimikcomputing.com/

২) কম্পিউটার প্রোগ্রামিং বইটির ওয়েব ভার্শন (ফ্রি) :http://cpbook.subeen.com/

৩) কম্পিউটার প্রোগ্রামিং বইয়ের পিডিএফ ডাউনলোড : http://goo.gl/vv0kRN

cpbookimg

৪) প্রোগ্রামিং বিষয়ক বই:

কম্পিউটার প্রোগ্রামিং ১ম খণ্ড

কম্পিউটার প্রোগ্রামিং ২য় খণ্ড

৫২টি প্রোগ্রামিং সমস্যা ও সমাধান

প্রোগ্রামিং কনটেস্ট – ডাটা স্ট্রাকচার ও অ্যালগরিদম

প্রোগ্রামিং ক্যারিয়ার গাইডলাইন – এক ডজন প্রোগ্রামারের কথা

৫) কম্পিউটার প্রোগ্রামিং বইয়ের ফ্রি অ্যান্ড্রয়েড অ্যাপ

৬) প্রোগ্রামিং শেখার গাইডলাইন (তামিম শাহ্‍‍রিয়ার সুবিন)

৭) প্রোগ্রামিং শেখার গাইডলাইন (তানভীরুল ইসলাম) :http://goo.gl/M1DeIZ

৮) প্রোগ্রামাবাদ – প্রোগ্রামিং প্রশ্নোত্তরের জন্য ওয়েবসাইট : http://programabad.com

 

৯) বাংলা ভাষায় প্রোগ্রামিং সমস্যা :http://cpbook.subeen.com/p/blog-page_11.html

১০) ফেসবুক গ্রুপ :https://www.facebook.com/groups/programming.school/