يمكنك اليوم على الويب العثور على كمية هائلة من المعلومات غير المتجانسة حول لغات البرمجة والمكتبات والأطر وأنظمة التشغيل والكيانات الأخرى الأكثر شيوعًا - فلنطلق عليها تقنيات. يتزايد عدد هذه التقنيات باستمرار ويتضح أن كل من يريد أن يذهب في طريق المطور يحتاج إلى التركيز على دراسة بعض المكدس الأكثر شيوعًا المرتبط بأي تقنية رئيسية.
هذا يطرح السؤال الأول - كيف يمكن للمرء أن يحدد الطلب على تقنية معينة؟ يمكن الإجابة على هذا السؤال ، على سبيل المثال ، على النحو التالي: هناك طلب على التكنولوجيا عندما يذكرها أرباب العمل كشرط لمقدم طلب وظيفة عند وصف وظيفة شاغرة. وبعبارة أخرى ، إذا تم عرض 100 وظيفة شاغرة ، تم ذكر التكنولوجيا أ 60 مرة ، والتكنولوجيا ب 20 مرة ، يمكن اعتبار التكنولوجيا أ أكثر شعبية من ب.
السؤال الثاني هو ما تعتبر التقنيات الرئيسية؟
بناءً على الاهتمام الكبير بالمقالات المتعلقة بتحليل شعبية لغات البرمجة ، سوف نعتبر لغة البرمجة هي التكنولوجيا الرئيسية.
وبالتالي ، يمكن صياغة المشكلة على النحو التالي - في مجموعة متنوعة من الوظائف الشاغرة ، من الضروري تسليط الضوء على مجموعة فرعية مرتبطة بالتقنية الرئيسية ، وفي هذه المجموعة الفرعية لحساب تكرار ذكر التقنيات الأخرى.
كقاعدة بيانات للوظائف الشاغرة ، سنستخدم بوابة hh.ru ، نظرًا لشعبيتها الكبيرة وتوافر HeadHunter API . لغة البرمجة هي Python 3.4.
لتقليل حجم المقالة ، لن يتم النظر في الجانب الفني من مسألة الحصول على البيانات ومعالجتها بالتفصيل ، ولكن يجب مراعاة بعض النقاط الرئيسية. كود المصدر للمشروع مفتوح ومتاح على جيثب .
الحصول على قائمة الوظائف
للحصول على قائمة بالوظائف الشاغرة المتعلقة بمبرمجي Python ، قم بإجراء طلب الحصول التالي باستخدام مكتبة الطلبات :
import requests import json l = "Python" params = {"text": " " + l, "search_field": "name", "area": 2, "period": 30, "page": 0} r = requests.get("https://api.hh.ru/vacancies", params=params) jr = json.loads(r.text)
ونتيجة لذلك ، نحصل على قاموس بالعناصر التالية:
- الصفحة: class 'int'
- العناقيد: class "NoneType"
- per_page: class "int"
- alternate_url: class 'str'
- وجدت: class 'int'
- الحجج: class "NoneType"
- العناصر: "قائمة" الفئة
- الصفحات: class 'int'
نحن مهتمون بـ:
- الصفحات الرئيسية ، التي تحتوي قيمتها على عدد الصفحات التي تحتوي على وظائف شاغرة ،
- مفتاح العناصر ، الذي يشير إلى قائمة الوظائف الشاغرة في الصفحة.
من كل عنصر في قائمة العناصر ، وهو قاموس ، نحتاج إلى مفتاح url . قيمة هذا المفتاح هي رابط لوصف تفصيلي للشواغر. من خلال تغيير معلمة الصفحة بشكل تسلسلي ، يمكنك التكرار عبر جميع الوظائف الشاغرة عند الطلب وإنشاء قائمة ضرورية لمزيد من التحليل للروابط. لتسريع عملية تحميل معلومات المهمة ، يتم استخدام العديد من سلاسل العمليات المتوازية من مكتبة سلاسل المحادثات:
from math import ceil import requests from threading import Thread import json class DownloadThread(Thread): def __init__(self, urls, number, res): Thread.__init__(self) self.number = number self.urls = urls self.res = res def run(self): for url in self.urls: resp = requests.get(url) if resp.status_code == requests.codes.ok: self.res.append(json.loads(requests.get(url).text)) else: print("Status code: " + str(resp.status_code)) print(url) def start_dl_threads(urls, th_num, res): threads = [] n = ceil(len(urls) / th_num) for i in range(th_num): t = DownloadThread(urls[i * n: (i + 1) * n], i, res) threads.append(t) t.start() for t in threads: t.join()
بعد بناء الاعتماد على سرعة التنزيل لمجموعة الاختبار البالغة 274 وظيفة شاغرة على عدد سلاسل التنزيل ، تقرر استخدام 10 سلاسل ، لأنه في هذه الحالة ، لا يؤدي عدد أكبر منها عمليًا إلى تقليل وقت البرنامج النصي.

إنشاء مفردات المهارات والبحث عن المهارات في الوصف الوظيفي
في البداية ، كان من المفترض إنشاء قاموس للمهارات الرئيسية يدويًا. ومع ذلك ، بعد تحليل هيكل الوصف الوظيفي ، أصبح من الواضح أنه يمكن أتمتة العملية بطرق عديدة. للقيام بذلك ، نحتاج إلى قائمة يمكن الوصول إليها من خلال المهارات الأساسية التي تحتوي على المهارات الأساسية لهذه الوظيفة الشاغرة. لسوء الحظ ، يحتوي عدد قليل من الوظائف الشاغرة على معلومات حول المهارات الرئيسية. بالإضافة إلى ذلك ، قد تختلف هذه المعلومات عن الوصف الرئيسي. لذلك ، معالجة هذه البيانات فقط لن تعطي صورة كاملة.
جميع المهارات الأساسية الفريدة للشواغر بأسماء "مبرمج" + ("Java" ، "JavaScript" ، "1C" ، "Python" ، "C" ، "C ++" ، "C #" ، "Objective-C" ، "Perl" و "Ruby" و "PHP") ، والمستخدمة - أول 150 الأكثر شيوعًا.
os.makedirs("data", exist_ok=True) langs = ("Java", "JavaScript", "1", "Python", "C", "C++", "C#", "Objective-C", "Perl", "Ruby", "PHP") par = {"text": "", "search_field": "name", "area": 2, "period": 30} o = {"skills": 1, "urls": 0, "vacs": 0} for l in langs: par["text"] = " " + l with open("data\data_" + par["text"] + str(datetime.date.today()) + ".json", "w") as f: json.dump(get_info_from_hh(par, 10, o), f, indent=4, ensure_ascii=False) data = Counter() for fn in os.listdir("data"): if os.path.isfile("data/" + fn): with open("data/" + fn, "r") as rf: data += Counter(json.load(rf)["skills"]) for item in data.most_common(150): print(item) jsdict = {item[0]: item[0] for item in data.most_common(150)} with open("kw.json", "w") as wf: json.dump(jsdict, wf, indent=4, ensure_ascii=False, sort_keys=True)
تم البحث عن الكلمات الرئيسية في الأوصاف الوظيفية باستخدام تعبير عادي من النموذج:
pattern = r"(?i)[^--a-zA-Z0-9_|^]%s[^--a-zA-Z0-9_|$]" % kw[item]
نظرًا لأن بعض التقنيات هي تعميم لعدة تقنيات خاصة أخرى ، عند الحساب باستخدام مفتاح sql ، على سبيل المثال ، تم استخدام قيمة النموذج:
"sql": "sql|mysql|postgresql|ms sql"
أيضًا ، لأخذ الأسماء المختلفة المتعلقة بنفس التقنية في الاعتبار ، تم استخدام تعبيرات النموذج:
" ": ".+|.+|design patterns", " ": ".+?|english", " ": ".+?.+?|.+?.+?|neural"
يمكن العثور على ملف الكلمات الرئيسية النهائي في مستودع GitHub .
عند اختيار التقنيات الرئيسية ، تم استخدام قائمة بأفضل 20 لغة حسب عدد الوظائف الشاغرة (المذكورة في العنوان) . في الوقت نفسه ، تبقى هذه اللغات فقط مع كلمة "مبرمج" في العنوان تعطي أكثر من 20 وظيفة شاغرة في سان بطرسبرج.
النتائج
تعكس نتيجة معالجة هذا المفهوم المجرد مثل "مبرمج" الصورة العامة لشواغر الصناعة. أولاً ، من الواضح أن كل صاحب عمل يريد الحصول على معرفة SQL واللغة الإنجليزية من مبرمج. كل صاحب عمل ثالث يريد مبرمج لامتلاك نظام تحكم إصدار git . نظرًا لاتجاه التطوير على الويب ، فإن html و css هي التقنيات المطلوبة. هذا مهم بشكل خاص لجافا سكريبت و PHP . بشكل غير متوقع إلى حد ما ، ولكن من المحتمل أن يضطر المبرمج للعمل في فريق .
من بين التقنيات الشائعة المدرجة في القرن الحادي والعشرين ، هناك برمجة كائنية التوجه وقواعد بيانات وخوارزميات وأنماط تصميم .
كنظام تشغيل ، يفضل استخدام Linux .
عند النظر في لغات معينة ، يمكنك أن ترى أن بجانب السطر الأول هو الإطار أو المكتبة الأكثر شيوعًا. بالنسبة لـ Java ، هذه هي Spring و Hibernate ، بالنسبة إلى C # - .net و asp.net ، ربما يحتاج مبرمج Python إلى Django ، وسيحتاج JavaScript إلى React .
المركب المحلي 1C الخاص والأكثر تساهلاً. سيكون لدى العديد من أصحاب العمل معرفة كافية فقط بهذه المنصة (ليس لدي أي فكرة عن مقدار أو القليل). المهارات المفيدة ستكون: العمل الجماعي ، وفهم عمليات الاختبار والقدرة على العمل مع قواعد البيانات .
نظرًا لخصائص محرك البحث ، تم إصدار العديد من النتائج باستخدام تقنية 1C بناءً على طلب "Programmer C". لذلك ، تبين أن النتائج بهذه اللغة غير صحيحة.
النتائج التي تم الحصول عليها في سان بطرسبرغ ، أعطيها أدناه.







